Chrome控制台和页内JavaScript之间有什么区别?

时间:2017-05-30 07:35:00

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

此JavaScript声明WAS在之前的Chrome版本中有效(作为Chrome扩展内容.js的一部分)在5个月前有效:

require(["function-widget-1:share/util/service/createLinkShare.js"]).prototype.makePrivatePassword=function(){return prompt("Some Massage:","")};

但是现在(在最新的Chrome中,作为Chrome扩展程序content.js的一部分),它无效,错误按摩是“Uncaught ReferenceError:require is not defined”。

但是,如果我在Chrome控制台中输入相同的语句(如在开发人员工具中),它现在(在最新的Chrome中)仍然有效。

所以我的问题是: 是什么造成了两种情景的区别?

1 个答案:

答案 0 :(得分:0)

您所看到的内容称为"Isolated world"

  

内容脚本在称为孤立世界的特殊环境中执行。他们可以访问注入页面的DOM,但不能访问页面创建的任何JavaScript变量或函数。它将每个内容脚本视为在其运行的页面上没有执行其他JavaScript。反过来也是如此:页面上运行的JavaScript无法调用任何函数或访问内容脚本定义的任何变量。

本质上,内容脚本在一个完全独立的JS上下文(想想“虚拟机”)中运行,该上下文附加到同一个DOM树中,并且看不到彼此的代码。

使用Dev Tools控制台时,您可以使用上面的下拉菜单切换JS上下文(最初称为“top”)。它应列出已存在的内容脚本上下文。

可以越过边界并在页面自己的上下文中运行一些代码;这种技术通俗地称为“注入脚本”(不要与编程注入内容脚本混淆)或“页面级脚本”,并且由this question规范地涵盖。

但是,跨越此边界的任何代码都难以与之通信 - 因为它与页面自己的代码无法区分,正如所指出的那样,内容脚本是不可见的。有几个问题涉及此问题:with content scriptwith background