在Chrome扩展中执行AJAX检索的javascript

在Chrome扩展中执行AJAX检索的javascript,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在写一个chrome扩展,它用一个内容脚本将div注入一个网站。内容脚本向我在manifest.json文件中清除的网站发出AJAX请求,并使用innerHTML将数据插入div。AJAX请求返回的部分内容是需要执行的javascript。内容脚本中的AJAX请求工作正常 当我从常规网站发出相同的AJAX请求时,返回的javascript执行得很好,但当我从内容脚本发出AJAX请求时,它不会执行。控制台中不显示任何错误。如果可能的话,我不想重新加载网站 我假设这是一个安全“特性”,而不是一个

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

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


我假设这是一个安全“特性”,而不是一个bug。如何关闭或避免这种行为?

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

你可能想退房。它不是你想要的100%,但主要部分在那里。基本上,您可以从后台页面(如果您还没有创建一个)使用chrome.tabs.executeScript()来执行下载的脚本。它在真实页面上下文而不是“内容脚本”上下文中运行javascript。现在您只需将该脚本(以字符串形式)放到后台页面,并确定要在其上执行该脚本的选项卡ID(从sender选项卡)

您可以使用将其发送到后台页面,在background.js中,使用接收脚本中的消息。然后使用sender参数获取tabId(sender.tab.id),并构建executeScript调用

还有一个有用的提示,默认情况下,chrome中的页面脚本(动态javascript执行)不会以任何设置的方式显示在chrome调试器中,但您可以在javascript的字符串中附加类似的内容:
“\n/@sourceURL=/myFolder/myDynamicJavascript.js”


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

try:@HaNdTriX不适用于内容脚本。@dudenrock您知道内容脚本的执行上下文和页面的执行上下文之间的区别吗?您所说的
页面脚本(动态javascript执行)是什么意思默认情况下,在chrome中,chrome调试器不会以任何设置方式显示?你是说内容脚本不会出现在调试器中吗?当在manifest.json中定义时,内容脚本确实会出现在调试器中,但当使用诸如
chrome.tabs.executeScript(null,{code:“我的代码在这里”})之类的代码块时,除非您添加
/@sourceURL=…
行,否则它们不会显示。