2013-02-16 77 views
1

我的清单看起来像这样:Chrome扩展如何注入我的内容脚本到所有Facebook页面

{ 
    "manifest_version": 2, 

    "name": "Facebook Extension", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "images/fbh.png", 
    "default_popup": "fbh-popup.html" 
    }, 

    "permissions": [ 
    "storage", 
    "background", 
    "tabs", 
    "http://www.facebook.com/*", 
    "https://www.facebook.com/*" 
    ], 

    "content_scripts": [ 
    { 
     "matches": [ 
     "http://www.facebook.com/*", 
     "https://www.facebook.com/*" 
     ], 
     "js": ["js/jquery-1.9.1.min.js", "js/fbh-main.js"], 
     "css": ["css/fbh-main.css"], 
     "run_at": "document_end" 
    } 
    ], 

    "background":{ 
    "persistent": true, 
    "scripts": ["js/jquery-1.9.1.min.js","js/fbh-background.js"] 
    } 
} 

我想每一次我去在Facebook新页面注入我的内容脚本。例如,如果我点击用户的个人资料,我想注入内容脚本。

在我的背景页,我有以下监听器:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo) { 
    console.log(changeInfo); 
    if (changeInfo.status === 'complete') { 
     chrome.tabs.executeScript(null, {file: "js/fbh-main.js"}); 
    } 
}); 

有几个与此问题,但是。首先,这个函数试图将我的内容脚本注入到所有页面中。我需要能够读取清单权限。其次,如果我从www.facebook.com开始,则内容脚本将执行它应该做的事情。但是,如果从那里,我点击“foo”的配置文件,然后转到www.facebook.com/foo,注入内容脚本(如console.log消息所证明的),但它没有执行它应该做的事情。我认为它的注入时间太快,因为如果我直接导​​航到www.facebook.com/foo,则内容脚本将被加载并执行其操作。

有没有更好的方法来做到这一点?

+0

是[这个问题](http://stackoverflow.com/questions/6497548/chrome-extension-make-it-run-每页加载)的任何帮助? – thordarson 2013-02-17 01:35:19

回答

0

如果你的脚本执行很快,你可以随时使用jQuery

$.(your code here);

的编辑:对于自动upadate问题,你可以简单地在内容脚本添加监听

document.addEventListener("DOMSubtreeModified", function(event){ 
    //something on the page has changed 
}); 
+0

我不是Chrome扩展专家,但没有为您的代码设置一个硬编码的超时错误类练习吗?你不应该听一个事件吗? – thordarson 2013-02-17 01:34:33

+0

Thx,你说得对,已经很晚了:我认为这里的解决方案更好。 – 2013-02-17 08:51:27

1

试试这个代码

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo,tab) { 
    console.log(changeInfo); 
    if ((tab.url.indexOf("http://www.facebook.com/") !=-1 || tab.url.indexOf("https://www.facebook.com/") !=-1) && changeInfo.status === 'complete') { 
     chrome.tabs.executeScript(tabId, {file: "js/fbh-main.js"}); 
    } 
}); 
  • chrome.tabs.executeScript(null,将在有源标签ö执行脚本f当前窗口,可能会在用户交互时发生变化,chrome.tabs.executeScript(tabId将始终确保以制表符中的脚本注入为目标。
  • chrome.tabs.onUpdated.addListener将触发对每个选项卡上,添加过滤器tab.url.indexOf("https://www.facebook.com/")确保脚本在脸书页面注入。

分享您的清单,内容脚本和相关文件,如果问题仍然存在

相关问题