尽快将变量从chrome扩展名传递到网页

时间:2012-01-20 03:41:10

标签: javascript google-chrome browser google-chrome-extension

我正在尝试使用我网站上执行的js来检测我的chrome扩展程序是否已安装。我找到了一些例子,一些我甚至不理解或者可以使它们起作用。我尝试和有点工作的是向DOM添加元素或修改一些css属性。例如:

在我的扩展背景页面上,我有:

function changeBG(tab){
     chrome.tabs.executeScript(tab.id, {
      code: ' document.body.bgColor="red" '
     });
}

chrome.tabs.onUpdated.addListener(changeBG);

在我的网站上我有:

<script>
  alert(document.body.bgColor);
</script>

背景确实变为红色,但.bgColor为null,因为我在页面开始加载时尝试在我的网站代码顶部读取它。页面加载后,我可以读取它,它返回“红色”。 (如果将一个元素注入页面然后尝试读取innerHTML或元素的属性,也会发生同样的事情。)

但我不想等待onload或其他任何内容,因为我的内容取决于是否安装了扩展程序。

我也尝试过从扩展内容加载图像的方法,但这又是间接的异步?方法

我不想“交换”内容,我想知道扩展程序是否已安装,然后继续在我的网站上加载任何其他内容

有人知道我该怎么做吗?

2 个答案:

答案 0 :(得分:3)

据我所知,javascript检查执行得太晚,因为网页内容已经由浏览器处理。如果您想知道在加载任何内容之前是否启用了扩展,您应该在服务器端进行检查。执行此操作的方法是使您的扩展程序将一些签名附加到浏览器发送到服务器的标头。然后,如果存在签名,您将知道请求发件人已安装您的扩展程序,您将能够返回正确的内容。描述了标题操作here。您可能需要使用此代码:chrome.webRequest.onBeforeSendHeaders.addListener

答案 1 :(得分:0)

由于它是您自己的网站,因此请使用inline installation使用的chrome.app.isInstalled方法。您必须先使用网站站长工具验证您的域名。