1

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

<script..>MYSCRIPT HERE</script>

<html>
.
.

我在 chrome 中制作了一个可以正确执行的脚本(我可以 alert(0) 等),但是它在不同的环境中运行,这不是我想要的。我希望它在与页面相同的环境中运行。

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

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:..",即使是在单独的环境中运行!

4

2 回答 2

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获得

于 2012-02-13T09:53:28.063 回答
0

正如 PAEz 指出的那样,Chrome 可能在当前版本中存在错误。但是,是的,很多关于如何使用 chrome 扩展将事物注入“文档”的见解。感谢迈克的帖子。下次我使用 greesemonkey 或其他东西注入时会记住这一点:)

于 2012-02-23T14:21:16.790 回答