我有一个脚本,希望在加载之前注入到文档中。I.E;它应该像一样工作
<script..>MYSCRIPT HERE</script>
<html>
.
.
我在chrome中制作了一个正确执行的脚本(我可以提醒(0)等),但它在不同的环境中运行,这不是我想要的。我希望它在与页面相同的环境中运行。
早些时候,我使用了一个技巧,在启动脚本中我使用了
window.location="javascript:<MY SCRIPT HERE>"
这有效地改变了执行环境,但在过去的几天里,它不起作用。我认为这是一个铬错误修复。有其他解决方法吗?注意:由于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
标记,将脚本注入页面的JavaScript上下文。换句话说,您的脚本可以在document_idle
注入,并执行类似于的操作
var s = document.createElement('script');
s.textContent = 'const a = function () {};';
document.documentElement.appendChild(s);
该脚本标记将在页面的上下文中执行,而不是在脚本的上下文中,并且应该允许您实现所需的结果。
有关内容脚本的文档,请访问https://developer.chrome.com/extensions/content_scripts