如何在Chrome插件中使用外部ajax响应

时间:2015-05-19 10:05:56

标签: javascript jquery ajax google-chrome-extension

我的网站中有一个现有的文件ajax,js,它创建一个ajax请求并创建一个全局JSON对象,searchResult使用该响应。现在我正在创建一个Chrome插件,其中需要此JSON对象。我有一个插件的内容脚本即。 plugin.js,我想在plugin.js文件中包含该对象。

当我尝试从plugin.js中记录window.searchResult时,它显示为未定义。

但是当我使用浏览器控制台时,它会按预期显示该值。

请帮助我。

1 个答案:

答案 0 :(得分:1)

问题

Chrome内容脚本和网页自带的脚本位于isolated worlds

  

内容脚本在称为孤立世界的特殊环境中执行。他们可以访问注入页面的DOM,但不能访问页面创建的任何JavaScript变量或函数

您的代码在控制台中运行,因为您默认在页面的上下文中执行它。要查看扩展程序看到的内容,您需要switch it

解决方案1a

首先,通用解决方案(即使您不控制网页也能正常工作)

通过将一些代码直接注入到页面" world"中,可以解决这个问题。 (或适当地称为上下文)。

injecting the code之后,您的页面级脚本需要与内容脚本通信以传递数据。它是possible with custom DOM events(正如你记得的那样,DOM是共享的)。页面级脚本在事件的详细信息中发送包含数据的事件。

或者,您可以将数据附加到某个DOM节点,例如,隐藏<div>

解决方案1b

由于您说它是您的页面,因此您可以跳过页面注入步骤,并在页面自己的代码中准备好一个监听器。

内容脚本发送自定义事件以请求数据,页面答案将数据传回,如1a所述。

解决方案2

理论上,您甚至不需要内容脚本。

您可以使用"externally_connectable" mechanism直接与该页面对话。

请注意,该页面必须启动对话。