我在前端项目使用javascript调用websql可在本地可以使用,一到network就不行了。而且我是用的是edge浏览器,这个浏览器支持websql。出错如图
应该是权限的问题,导致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。
至于代码问题,根据您提供的信息,很难判断具体是什么原因导致的错误。建议您按照以下步骤逐一排查:
确定网络环境是否正常。即使您在本地可以使用 Web SQL,但是一旦涉及到网络请求,就可能会遇到跨域问题或其他网络问题导致访问失败。
检查 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]);
});
以上是常见排查步骤,希望能对您解决问题有所帮助。
如果我的回答解决了您的问题,请采纳!
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个错误是因为浏览器默认不允许非安全上下文中使用 WebSQL。为了解决这个问题,你可以尝试以下几个步骤:
参考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 协议来提供你的网站,以确保安全性和稳定性。