我试图制作一个在我访问Facebook时激活的扩展程序。到目前为止这一切都很好,然后它开始无限期地运行我的代码。
我想要的是仅在我第一次访问Facebook时运行content.js脚本,然后再也不再运行它。
我目前的方法是这样,但它不起作用:
background.js
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.storage) {
if (typeof request.value != 'undefined') {
localStorage[request.storage] = request.value;
}
sendResponse({storage: localStorage[request.storage]});
} else {
sendResponse({});
}
});
content.js
var status;
chrome.extension.sendRequest({storage: 'status'}, function(response) {
status = response.storage;
});
if(status != '1')
{
chrome.extension.sendRequest({storage: 'status', value: '1'});
// do my stuff here but only 1 time
}
的manifest.json
"content_scripts": [ {
"js": [ "js/jquery.js", "content.js" ],
"matches": [ "https://facebook.com/" ]
} ],
基本上我的想法是在访问Facebook时运行content.js,然后在脚本完成后,我添加一个状态变量,然后下次检查状态是否为1,这意味着代码之前已经运行过。
我该如何做到这一点?
谢谢。
答案 0 :(得分:1)
1)你正在制作the standard async JavaScript mistake。
var status;
chrome.extension.sendRequest({storage: 'status'}, function(response) {
status = response.storage; // <--+
}); // | This code didn't execute yet
// |
if(status != '1') // --------------+
{
chrome.extension.sendRequest({storage: 'status', value: '1'});
// do my stuff here but only 1 time
}
2)您使用的old and deprecated版Messaging非常chrome.storage
API。需要extension.sendRequest
/ onRequest
,替换为runtime.sendMessage
/ onMessage
。
3)最好不要在这里使用Messaging; {{3}}专门用于此目的。再一次,也许你正在使用一些非常古老的教程。