关于#websql#的问题,如何解决?

我在前端项目使用javascript调用websql可在本地可以使用,一到network就不行了。而且我是用的是edge浏览器,这个浏览器支持websql。出错如图

img

img

应该是权限的问题,导致websql不允许你访问。

参考GPT和自己的思路:这个错误提示表明你的应用程序在非安全环境下使用了MebsDatabase API,导致被禁止访问。从错误信息来看,似乎是你的网页在一个非安全的本地网络上运行,而这个网络不允许使用MebsDatabase API。

要解决这个问题,你可以考虑以下几点:

1 使用HTTPS协议
尝试在使用HTTPS协议的情况下运行你的网页,这样可以避免在非安全环境下使用MebsDatabase API,也可以保证数据的安全性。如果你的网页已经使用了HTTPS协议,请确保使用的证书是有效的。

2 使用其他的数据库API
考虑使用其他的数据库API,例如IndexedDB或Web Storage。这些API在现代浏览器中都得到了广泛的支持,并且可以在安全的环境下使用。

3 尝试使用其他浏览器
虽然Edge浏览器支持MebsDatabase API,但在某些情况下可能会受到限制。你可以尝试在其他浏览器中测试你的网页,例如Chrome或Firefox。

希望这些建议可以帮助你解决问题。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先需要注意的是,Web SQL Database 在最新的 Web 技术标准中已经被废弃,建议使用其他的本地存储方案,比如 IndexedDB。

至于代码问题,根据您提供的信息,很难判断具体是什么原因导致的错误。建议您按照以下步骤逐一排查:

  1. 确定网络环境是否正常。即使您在本地可以使用 Web SQL,但是一旦涉及到网络请求,就可能会遇到跨域问题或其他网络问题导致访问失败。

  2. 检查 JavaScript 代码是否正确。可以按照以下步骤逐一检查:

// 建立数据库连接
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);

// 创建数据表
db.transaction(function (tx) {
  tx.executeSql('CREATE TABLE IF NOT EXISTS test (id unique, name)');
});

// 插入数据
db.transaction(function (tx) {
  tx.executeSql('INSERT INTO test (id, name) VALUES (?, ?)', [1, '张三']);
});

// 查询数据
db.transaction(function (tx) {
  tx.executeSql('SELECT * FROM test', [], function (tx, results) {
    var len = results.rows.length, i;
    for (i = 0; i < len; i++) {
      console.log(results.rows.item(i).id + ":" + results.rows.item(i).name);
    }
  });
});

// 更新数据
db.transaction(function (tx) {
  tx.executeSql('UPDATE test SET name=? WHERE id=?', ['李四', 1]);
});

// 删除数据
db.transaction(function (tx) {
  tx.executeSql('DELETE FROM test WHERE id=?', [1]);
});
  1. 检查浏览器兼容性。虽然 Edge 支持 Web SQL,但是不同版本的 Edge 也可能存在兼容性问题。您可以查阅相关文档,了解 Edge 浏览器对 Web SQL 的支持程度。

以上是常见排查步骤,希望能对您解决问题有所帮助。
如果我的回答解决了您的问题,请采纳!

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个错误是因为浏览器默认不允许非安全上下文中使用 WebSQL。为了解决这个问题,你可以尝试以下几个步骤:

  1. 确保你正在使用最新版本的 Edge 浏览器,并检查浏览器的设置,确保允许非安全上下文中使用 WebSQL。
  2. 如果你的网站正在使用 HTTPS,可以尝试使用 HTTPS 访问你的网站,这样就可以避免非安全上下文的问题。
  3. 如果你的网站不能使用 HTTPS,你可以尝试使用 IndexedDB 作为 WebSQL 的替代方案。IndexedDB 是一个更安全和更稳定的 Web 存储解决方案,它可以在非安全上下文中使用。
  4. 如果以上方法都不起作用,你可以考虑将你的应用程序部署到一个支持 HTTPS 的服务器上,这样就可以避免非安全上下文的问题。

参考GPT的回答和自己的思路,这个错误提示表明,WebSQL 在非安全上下文中被禁用了,而你的网站不是通过 HTTPS 协议提供的。因此,你需要使用安全协议来访问你的网站,比如使用 HTTPS 协议。

在开发阶段,你可以通过将 localhost 添加到白名单来忽略此错误。在 edge 浏览器中,你可以使用命令行参数来添加白名单,命令如下:

msedge.exe --allow-file-access-from-files --disable-web-security --user-data-dir=c:\my-edge-data-dir

这将允许你在 edge 中访问本地文件,并且禁用了一些安全特性。但是在生产环境中,你应该使用 HTTPS 协议来提供你的网站,以确保安全性和稳定性。