Chrome扩展程序在页面加载前注入脚本

时间:2011-10-23 07:42:35

标签: javascript dom google-chrome-extension code-injection

我正在第三方网站上开发Chrome应用程序。

我想要更改的文档具有以下页面格式:

<head>
.
.meta data here
.
</head>
<body>
  <script type="text/javascript">
    function a1(){
      ..contents of function a1
    }
  </script>

  .
  .other contents of body
  .
  <script type="text/javascript">
     a1();  // <-- I don't want this to be executed
  </script>
</body>

我的问题是我希望加载整个页面,但函数调用a1();

除外

所以我想到了一个简单的解决方案:在函数定义之前;函数a1(){..},我想创建一个作为CONSTANT函数的a1,它什么都不做,因此使a1()调用无效。

问题是如果我在我的js中将函数定义为常量run_at document_start,则执行环境不同,因此它不会影响页面。

所以在同一个执行环境中运行的替代方法是使用innerHTML + =“...”INJECT代码

另一个替代方法是使用“createElement”构造一个脚本元素,src是一个外部js文件,必须在执行前加载。

两个备选方案都不起作用,因为解析树未在run_at document_start脚本中创建。

所以,我想到了另一个解决方案。我添加了DOMModifySubTree事件的监听器,希望改变解析序列(我知道,听起来很有趣:))这样就不会调用该函数。没有帮助。

所以,我的问题是如何阻止对a1()函数的调用? P.S - 我无法联系第三方网站开发者。

2 个答案:

答案 0 :(得分:1)

Greasemonkey正是您所寻找的 这是一个Firefox扩展,在您选择的网页中注入您自己的脚本 访问wiki.greasespot.net开始编写脚本。

幸运的是,Chrome本身支持Greasemonkey脚本。有关详细信息,请参阅this page

答案 1 :(得分:0)

很抱歉迟到的回复。我最初跳过函数调用的原因是我在文档启动时运行了一个脚本并将其注入“文档”(因为JS在单独的环境中运行)。在我使用的注入脚本中

const a1=function(){};

这样,当再次声明函数时,它不会被覆盖,因此函数不会被执行(即;它正在执行我们的虚函数),从而基本上破坏了代码。 :)