【问题标题】:localStorage key not being created未创建 localStorage 密钥
【发布时间】:2014-03-07 11:50:00
【问题描述】:

我正在尝试在当前页面和外部页面上存储密钥。在下面的示例中,我使用 google。 url 和 x 都在前面的函数中定义。

window.localStorage.setItem(url, x);
var url2 = "http://google.com/";
document.location = url2;
storeToDB(url, x);


function storeToDB(url, x) {
    setTimeout(function() { console.log("Waiting..."); }, 1000); 
    window.localStorage.setItem(url, x);
    document.location = url;
    console.log("Value Stored");
}

方法被调用,但是没有存储密钥。 页面看起来好像正在刷新,所以我知道它正在通过那条线。

此代码在 chrome 扩展的内容脚本上运行。

【问题讨论】:

  • 您知道您的“Waiting...” 消息会在操作完成后出现,对吗?设置setTimeout(...); 后,浏览器将继续运行函数中的其余 JavaScript 命令。
  • @War10ck 你能告诉我如何解决它吗?

标签: javascript google-chrome-extension local-storage


【解决方案1】:

设置 location.href 在脚本终止之前不会生效。因此,如果您多次设置它,只有您设置的最后一个值会被导航到。

更重要的是,一旦浏览器离开页面,在该页面上运行的任何脚本都不会继续运行。如果您可以将浏览器导航到另一个页面并在那里执行任意代码,那将是一个巨大的安全漏洞。

【讨论】:

  • 那么如何在另一个页面上设置localStorage?
  • 如果您谈论的是同一域上的页面 - localStorage 已经在它们之间共享。如果您谈论的是不同域上的页面 - 您不能触摸它们的 localStorage。
  • 请记住,这是从扩展中的内容脚本运行的,因此我可以将 localStorage 添加到任何域。正如我所说,它适用于第一页,但不适用于第二页。
【解决方案2】:

根据内容脚本的文档,您不能从那里使用 localStorage。您只能使用 chrome.storage 或从后台页面使用 localStorage(通过从内容脚本向其发送消息)

【讨论】:

  • 在代码之前它设置/使用 localStorage 值没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多