我有一个脚本,我希望在加载之前将其注入到文档中。即;它应该像
一样运作<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:..”时,即使是在单独的环境中运行!
帮助! :)
答案 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注射时会记住这一点:)