我有一个脚本,我想在加载之前将其注入(inject)到文档中。 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:.."
时,即使它在单独的环境中运行!
最佳答案
您应该能够通过内容脚本添加 script
标记,将脚本注入(inject)页面的 JavaScript 上下文。换句话说,您的脚本可以在 document_idle
处注入(inject),并执行如下内容:
var s = document.createElement('script');
s.textContent = 'const a = function () {};';
document.documentElement.appendChild(s);
该脚本标记将在页面的上下文中执行,而不是在您的脚本的上下文中执行,并且应该允许您获得您正在寻找的结果。
内容脚本的一般文档可在 https://developer.chrome.com/extensions/content_scripts 获得。
关于javascript - Chrome 扩展程序在文档开始时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9246772/