我目前正在开发一个网络插件,可根据您当前所在的网站执行某些操作。当我从URL栏(例如yahoo.com)访问网页时,加载项工作正常,但是当我尝试从jahoo上的任何其他页面运行javascript时它不会运行。我正在使用的代码是:
if(document.URL.search("yahoo.com")>=0){
var scriptYahoo = document.createElement('script');
scriptYahoo.type='text/javascript';
scriptYahoo.src='http://localhost:8001/yahooChrome.js';
body.appendChild(scriptYahoo);
}
我的印象是,URL.search将在整个URL中查找,如果在URL中的任何位置找到它,则返回true。如果有人可以试着让我知道为什么这只适用于你去yahoo.com而不是任何其他网站导航到yahoo.com内部。
我已经缩小了一点,并意识到每当加载页面时,它们所在的文件甚至都不会被调用。当我只是去一些随机的其他网页时,它确实被调用了。
- - - - - - - - 编辑
我为我缺乏对所发生的事情缺乏完整的知识而道歉,我正在从另一个开发人员那里接管这些代码并且还不确切知道到底发生了什么。我发现如果这个代码只是简单地运行它将返回URL中的每个网站yahoo.com。但这在任何时候都不会被调用。我在这里有这个功能,看看是否完全修改了一个标签:
chrome.tabs.onUpdated.addListener(check);
//chrome.tabs.onClicked.addListener(test);
function check(tab_id,data,tab){
console.log("updated");
if (data.status == "complete")
{
chrome.tabs.sendRequest(tab.id, {greeting: "hello"}, function(response) {
console.log(response.farewell); });
}
};
如果我在这个函数的任何地方放置一个警报,无论正在加载哪个页面,它都会一直打到。当我接触到我的onRequest函数虽然它没有命中,如果它是yahoo.com的某些变体
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?"from a content script:" + sender.tab.url :"from the extension");
trackInfo();
setTimeout("init();", 2000); //wait till the page got loaded
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
else
sendResponse({});
});
所以在这一点上我不确定为什么它会停止捕捉函数内部的所有变化。再次感谢您的帮助,非常感谢。
答案 0 :(得分:0)
我想通了,我只需要这样做:
"matches": ["http://*/*","https://*/*"],
而不是:
"matches": ["http://*","https://*"],
在我的清单文件中,它修复了我的所有问题。