0

我想打一个Chrome扩展,做this(自动登录到一个网站,可能不是最好的方法,因为这是我第一次做JS),并有一个选项页面,用户可以在设置他的信息并保存(localstorage?),以便内容脚本可以访问它以及选项页面。Chrome扩展(回调/ localStorage的)

下面是我经过大量的研究后,来看看例子等: http://pastebin.com/yTiXp4VY(所有文件的源代码那里)。

最后我放弃了,只是用试错所以有吨错误的存在。控制台报告由于安全原因无法运行。请解释一下这个版本有什么问题。我不需要你修复我的代码,我只是在学习JS。

+0

奇怪......我发现[这](http://stackoverflow.com/questions/3937000/chrome-extension-accessing-localstorage-in-content-script),并试图他建议的例子,我得到它的安全消息......不知道为什么它的发生...... – Seren

+0

这将有助于如果你确实引用了“安全信息”。 –

+0

由于Content-Security-Policy拒绝执行内联事件处理程序。 – Seren

回答

0

对于大多数情况,你的代码似乎是正确的。只有一个注意:你的选项页面可以直接访问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")}); 
    } 
} 

请注意,响应是具有两个属性userpass这里的对象 - 这样的内容脚本可以在获得响应后立即继续,它具有所有必要的数据,并且不需要等待第二个响应。

更新:关于您收到的错误消息:Content Security Policy是为了防止您的扩展程序被恶意网站利用。该保护的一部分不允许HTML中的内联脚本 - 如onload="load_options()"。所有将运行的脚本都需要放在JavaScript文件中。因此,而不是这个onload属性,你可以把下列options.js

window.addEventListener("load", load_options, false); 

addEventListener documentation on MDN

+0

好吧,我试图修改它根据您的信息,但我遇到了不相关的消息问题,但是,当我试图让从elementId提交按钮它总是返回null。 [这是修改后的代码](http://pastebin.com/7vLamhNd),抱歉,我这么晚回复,过去几天我一直很忙。 *注意*我在HTML中的脚本中尝试了相同的代码,它的工作原理?但那不是我想要的...... – Seren

+0

@Seren:在完成加载之前不要访问页面... –

+0

啊好的,我将添加事件监听器到加载函数-.- – Seren