Sri*_*s B 6 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
});
});
});
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.非常感谢.
Emr*_*oin 12
您要求的是注入脚本以获取原始页面脚本中定义的变量的值.这个问题有两个答案:
这是不可能的.注入页面的内容脚本是沙箱,无法访问原始页面javascript范围.这意味着您无法访问原始页面的javascript中定义的变量,函数和对象.并且您的变量,函数和对象将无法从原始页面访问.
仅共享页面的DOM.这允许您修改页面的内容.但是,您不能删除现有的事件处理程序.
这是出于明显的安全和安全原因.如果你在不知道它是原始页面的功能的情况下覆盖它,它就会破坏它.
有一种方法可以绕过铬砂箱限制.这带有共享DOM,允许您添加<script src="..."><\script>
到页面.该脚本将在原始页面的javascript VM中加载和执行,因此您可以访问全局JavaScript范围.
但是这样,您将无法访问Chrome扩展程序API,因为您在原始页面中运行代码.因此,与后台页面或注入的内容脚本的通信将很困难.
执行此操作的常用方法是向<div>
页面添加隐藏,并将要发送到内容脚本的结果放入其中.您将结果作为文本(例如,使用JSON.stringify),然后使用您的内容脚本读取结果.
它真的很脏,只能在最后一次尝试中使用.
归档时间: |
|
查看次数: |
5005 次 |
最近记录: |