1

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

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

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

4

1 回答 1

0

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

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

您可以使用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 代码中设置断点。这是救命稻草。

于 2012-12-20T22:00:53.600 回答