当我在Chrome扩展程序中按下我的图标时,我正在尝试运行代码。当我以前用代码运行代码时:“代码...”它改变了标题,但没有运行jquery代码。我读到你需要从文件中执行它,所以我添加了一个文件。现在它们都不起作用,在标题改变之前(当我使用代码时)和现在(当我使用文件时)它不起作用。我添加了警报以查看运行的代码,它们都不起作用,甚至不是第一个
我得到了以下应用:
的manifest.json:
{
"name": "Pandora Likes",
"version": "0.0.1",
"manifest_version": 2,
"background": { "scripts": ["background.js"] },
"browser_action": {
"default_icon": {
"19": "icons/19x19.png"
},
"default_title": "Pandora Likes"
},
"permissions": ["tabs","http://*/","https://*/"]
}
background.js:
function onClick() {
chrome.tabs.query({},function(array_of_Tabs) {
for(var i=0;i<array_of_Tabs.length; i++){
if(array_of_Tabs[i].url.indexOf('pandora.com')> -1) {
//chrome.tabs.update(array_of_Tabs[i].id, { selected: true });
chrome.tabs.executeScript(array_of_Tabs[i].id,{file: "like.js"});
}
}
});
}
chrome.browserAction.onClicked.addListener(onClick);
like.js:
alert("before");
document.title='gaga';
alert('after');
console.log("before);
$('.thumbDownButton').click();
console.log("after);
感谢您的帮助
答案 0 :(得分:1)
这里有很多问题。
您的match patterns(http://*/
)仅匹配包含空白路径的网址。即您将匹配http://example.com/
但不匹配http://example.com/test/
。
您可以使用单个匹配模式*://*/*
(匹配http或https)甚至<all_urls>
来解决此问题。或者,因为您只是在寻找Pandora,*://*.pandora.com/*
。
您的like.js
有语法错误,通过SO上的语法高亮显而易见。您忘记了第4和第6行的结束"
。
要在您的上下文脚本中使用$
,您需要include jQuery first,即使它出现在页面上,因为上下文脚本是isolated from the page。 (Chrome的控制台版本为$
,但内容脚本也无法使用
即使你做包含jQuery,触发click()
可能也不会导致你的期望。同样,由于内容脚本是隔离的,因此单击处理程序位于页面上下文中,可能*不会被您的代码触发。考虑injecting code into the page。
请注意:您应该花一些时间自行调试扩展程序。 Chrome通常会对其错误消息有所帮助;通过chrome://extensions/
处的链接查看后台的页面控制台,内容脚本的错误将显示在选项卡的控制台中。
* 可能不会被触发,因为你仍然可以创建一个DOM鼠标点击事件来触发页面的监听器,但我有理由相信.click()
不会这样做。