如何在Chrome扩展的后台页面上执行脚本

如何在Chrome扩展的后台页面上执行脚本

问题描述:

我正在开发Chrome扩展。我的manifest.json的是:实际网页上如何在Chrome扩展的后台页面上执行脚本

"page_action": { 
    "default_icon": { 
     "19": "icons/icon19.png", 
     "38": "icons/icon38.jpg" 
    }, 
    "default_popup": "options.html" 
}, 

在我的分机,我试图执行它试图运行脚本/到达:

// in options.html 
chrome.tabs.executescript(null,{code:"alert('hello!');"}) ; 

但Chrome扩展调试器输出这样的错误:

Uncaught TypeError: Object #<Object> has no method 'executescript' 

我想立即反映对content_script或实际网页的选项的任何更改。

在page_action范围内,我该如何到达“chrome”对象?

+0

它真的取决于你在做什么,但是大多数时候你应该可以使用ContentScript http://developer.chrome.com/extensions/content_scripts.html 这是一个更好的做法。 – 2013-02-28 08:00:51

现在试试将executescript更改为executeScript首都'S'很重要。

executeScriptinsertCSS主要用于将js或css文件注入给定选项卡而不是原始代码。当你想在非常特定的情况下注入代码时,会使用它们。在你的代码中,你并没有指定一个id的代码插入哪个标签,所以它只是在给定的上下文中注入它。如果使用与消息传递类似的chrome.tabs.query,则应该能够将代码注入到实际选项卡中。

看来你正试图影响某种变化当您更改选项从Page Action一个弹出一个给定的选项卡上的我个人会建议使用jQuery,同时使用来自其他问题将消息传递给做出的实际变化向给定选项卡发送消息。您可以尝试使用cssJavascript的程序化注入来执行此操作,但选项中的连续更改可能会产生不良结果。

我不知道你正在尝试做什么样的改变的确切细节。如果他们纯粹是css,那么您可以将一个样式表注入到页面中,只需在要更改的事物上切换一个类,并为每个方案创建一个类。如果你更详细地描述你想要做的事情,我可以给出更详细的建议。

+0

我做过了,但它永远不会到达实际网页的范围,只是在扩展沙箱中运行。 – Digerkam 2013-02-28 06:01:43

+1

@Digerkam我已经更新了一些关于'executeScript'的更多信息我的答案 – BeardFist 2013-02-28 07:25:34

+0

将page_action想象成一个显示扩展选项的弹出窗口,我在这里完成的是直接反映对实际网页的任何选项更改。我通过你的回答解决了我的问题,谢谢! – Digerkam 2013-02-28 13:53:02