Chrome扩展程序在doc start开始运行

时间:2012-02-12 05:49:25

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

我有一个脚本,我希望在加载之前将其注入到文档中。即;它应该像

一样运作
<script..>MYSCRIPT HERE</script>

<html>
.
.

我已经在chrome中创建了一个正确执行的脚本(我可以提醒(0)等)但是,它运行在不同的环境中,这不是我想要的。我希望它作为页面在SAME环境中运行。

早些时候,我曾在我使用的启动脚本中使用了一个技巧

window.location="javascript:<MY SCRIPT HERE>"

它有效地改变了执行环境,但在过去的几天里它无法正常工作。我认为这是一个Chrome错误修复。还有其他解决方法吗?注意:我无法在启动脚本中动态地向脚本添加脚本标记,因为document.body等不可用。

我想向您提供有关我为何需要此以及之前解决方案的详细信息。 我无法控制的HTML页面:

.
.
<script>
function a(){//DOSOMETHING}
</script>
.
.
<script>
a(); <<------ I DONT WANT TO CALL THIS
</script>

珍贵的解决方案: 启动javascript包含

window.location='javascript:const a=function(){};';<<-CONST used!!

^^当页面实际加载时,这将强制重新声明'a'的错误,因此,当调用a()时,没有任何反应。 (聪明,对吗?-_-)

但是现在,我意识到当我做window.location =“js:..”时,即使是在单独的环境中运行!

帮助! :)

2 个答案:

答案 0 :(得分:3)

您应该可以通过内容脚本添加script标记,将脚本注入页面的JavaScript上下文中。换句话说,您的脚本可以在document_idle注入,并执行类似:

的操作
var s = document.createElement('script');
s.textContent = 'const a = function () {};';
document.documentElement.appendChild(s);

该脚本标记将在页面的上下文中执行,而不是在脚本的上下文中执行,并且应该允许您实现您正在寻找的结果。

一般内容脚本的文档可在https://developer.chrome.com/extensions/content_scripts

获取

答案 1 :(得分:0)

当PAEz指出时,Chrome可能在当前版本中有一个错误。但是,有很多见解可以使用chrome扩展将内容注入“文档”。谢谢Mike的帖子。下次我使用greesemonkey注射时会记住这一点:)