首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >页面加载前Chrome扩展插入脚本

问页面加载前Chrome扩展插入脚本
EN

Stack Overflow用户
提问于 2011-10-23 15:42:35
回答 2查看 5.1K关注 0票数 1

我正在开发一个第三方网站上的铬应用程序。

我尝试更改的文档的页面格式如下:

代码语言:javascript
复制
<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()的函数;

因此,我想到了一个简单的解决方案:在函数定义ie;function a1(){..}之前,我想将a1创建为一个不做任何事情的常量函数,从而使a1()调用变得无用。

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

因此,在同一执行环境中运行的替代方法是使用innerHTML+=“...”注入代码。

另一种选择是使用"createElement“构造一个脚本元素,src是一个外部js文件,在执行之前必须加载该文件。

这两种方法都不起作用,因为解析树不是在run_at document_start脚本中创建的。

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

那么,我的问题是如何防止调用a1()函数?附言-我无法联系第三方网站开发人员。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-23 22:25:33

很抱歉回复得太晚了。我最初跳过函数调用的方法是在文档开始时运行脚本并将其注入到“文档”中(因为JS在单独的环境中运行)。在我使用注入脚本中

代码语言:javascript
复制
const a1=function(){};

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

票数 0
EN

Stack Overflow用户

发布于 2011-10-23 15:50:12

Greasemonkey就是你要找的东西。

这是一个火狐扩展,在你选择的网页中注入你自己的脚本。

访问wiki.greasespot.net开始编写脚本。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7864970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档