2012-12-20 26 views
1

我正在写一个chrome扩展,它向内容脚本中的网站注入div。内容脚本向我在manifest.json文件中清除的网站发出AJAX请求,并使用innerHTML将数据插入到div中。部分AJAX请求返回的是需要执行的javascript。内容脚本中的AJAX请求正常工作。在Chrome扩展中使用AJAX执行JavaScript检索

当我从常规网站发出相同的AJAX请求时,返回的JavaScript执行得很好,但是当我从内容脚本发出AJAX请求时,它不会执行。控制台中不显示任何错误。如果可能,我不想重新加载网站。

我认为这是一个安全“功能”,而不是一个错误。我怎样才能关闭或规避这种行为?

+0

请尝试:http://developer.chrome.com/extensions/contentSecurityPolicy.html – HaNdTriX

+0

@HaNdTriX不适用于内容脚本。 –

+1

@DudeOnRock您是否知道内容脚本的执行上下文与页面的执行上下文之间的区别? –

回答

0

首先,Rob W说的非常重要,如果您还不知道它,对内容脚本运行的不同环境的一个很好的解释很有用。

您可能想检查this了。这不是100%你正在寻找,但主要部分在那里。基本上从你的背景页面(如果你还没有创建一个),你可以使用chrome.tabs.executeScript()来执行你下载的脚本。它在真实页面上下文中运行JavaScript,而不是“内容脚本”上下文。您现在需要的只是将该脚本(以字符串形式)提供给后台页面,并确定要执行的脚本(来自发件人选项卡)

您可以使用chrome.extension.sendMessage将其发送到后台页面,在background.js中,使用chrome.extension.onMessage通过脚本接收消息。从那里使用sender参数来获取tabId(sender.tab.id),并构建你的executeScript调用。

还有一个有用的提示,在默认情况下,Chrome浏览器网页脚本(动态JavaScript执行)没有在Chrome调试任何一组的方式显示出来,但可以追加像这样你的JavaScript字符串: "\n//@ sourceURL=/myFolder/myDynamicJavascript.js"

这将使该脚本始终显示为chrome调试器的“/myFolder/myDynamicJavascript.js”路径,允许您在已插入的js代码中设置断点。这是一个救生员。

+0

默认情况下,chrome中的页面脚本(动态javascript执行)是什么意思,在chrome调试器中没有以任何设置的方式显示?你是指内容脚本说他们不在调试器中? – Sudarshan

+0

内容脚本在manifest.json中定义时显示在调试器中,但在使用代码块(例如'chrome.tabs.executeScript(null,{code:“my_code_here”});'时,它们不会显示除非你添加'// @ sourceURL = ...'行。 – Scott