访问chrome扩展中当前选项卡的所有窗口变量

时间:2015-09-18 06:04:54

标签: javascript google-chrome-extension

任何人都可以发布用于访问chrome扩展中的窗口变量的代码。 当我点击chrome扩展按钮时,我需要访问窗口变量。 我正在获取窗口对象,但没有加载所有变量。 我知道我们可以通过注入脚本来创建它。但我没有得到如何实现它。 目前我正在尝试以下代码来获取当前活动选项卡的页面源。

 chrome.tabs.executeScript({code:
            "document.getElementsByTagName('html')[0].innerHTML"
        }, function(result) {
    var value = result[0];
    console.log(value);
    chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
        callback({
            url: tabs[0].url,
            title: tabs[0].title,
            jsonValue: value
        });
    });
}); 

请帮我解决这个问题。非常感谢。

1 个答案:

答案 0 :(得分:10)

您要求的是注入脚本以获取原始页面脚本中定义的变量的值。这个问题有两个答案:

1。 Google官方回答

这是不可能的。注入页面的内容脚本是沙箱,无法访问原始页面javascript范围。这意味着您无法访问原始页面的javascript中定义的变量,函数和对象。并且您的变量,函数和对象将无法从原始页面访问。

仅共享页面的DOM。这允许您修改页面的内容。但是,您不能删除现有的事件处理程序。

这是出于明显的安全和安全原因。如果你在不知道它是原始页面的功能的情况下覆盖它,它就会破坏它。

Take a look here for more information

2。非正式和肮脏的答案

有一种方法可以绕过铬砂箱限制。这带有共享DOM,允许您向页面添加<script src="..."><\script>。该脚本将在原始页面的javascript VM中加载和执行,因此您可以访问全局JavaScript范围。

但是这样,无法访问Chrome扩展程序API,因为您在原始页面中运行代码。因此,与后台页面或注入的内容脚本的通信将很困难。

执行此操作的常用方法是向页面添加隐藏的<div>,并将要发送到内容脚本的结果放入其中。您将结果作为文本(例如,使用JSON.stringify),然后使用内容脚本读取结果。

它真的很脏,只能在最后一次尝试中使用。