对于大多数情况,你的代码似乎是正确的。只有一个注意:你的选项页面可以直接访问localStorage
,它不需要那个背景页面。但主要问题似乎是内容脚本的构建方式 - 它假定用户/密码数据将立即(同步)可用。这不是它的工作原理:您正在向后台页面发送消息,最终后台页面将会回答,并且将在内容脚本中调用您的回调。最简单的方法是延迟所有操作,直到发生这种情况并且您有数据。将一条消息发送给后台页面会给你所有的数据应该更容易。事情是这样的:
var userName = null;
var passWord = null;
chrome.extension.sendRequest({ eventName: "getLogin" },
function(response) {
userName = response.user;
passWord = response.pass;
// Now we can continue doing whatever we are doing
checkIfAutoUrl();
}
);
和消息处理你的背景页是这样的:
function onRequest(request, sender, sendResponse) {
if (request.eventName == "getLogin") {
sendResponse({user: getStorage("user"), pass: getStorage("pass")});
}
}
请注意,响应是具有两个属性user
和pass
这里的对象 - 这样的内容脚本可以在获得响应后立即继续,它具有所有必要的数据,并且不需要等待第二个响应。
更新:关于您收到的错误消息:Content Security Policy是为了防止您的扩展程序被恶意网站利用。该保护的一部分不允许HTML中的内联脚本 - 如onload="load_options()"
。所有将运行的脚本都需要放在JavaScript文件中。因此,而不是这个onload
属性,你可以把下列options.js
:
window.addEventListener("load", load_options, false);
见addEventListener
documentation on MDN。
奇怪......我发现[这](http://stackoverflow.com/questions/3937000/chrome-extension-accessing-localstorage-in-content-script),并试图他建议的例子,我得到它的安全消息......不知道为什么它的发生...... – Seren
这将有助于如果你确实引用了“安全信息”。 –
由于Content-Security-Policy拒绝执行内联事件处理程序。 – Seren