javascript - Chrome 扩展程序在文档开始时运行

标签 javascript google-chrome-extension content-script

我有一个脚本,我想在加载之前将其注入(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/

相关文章:

javascript - 如何获取javascript文件的内容作为变量

javascript - 没有后台页面的启用选项的内容脚本 Chrome 扩展?

css - 我的 CSS 没有通过我的内容脚本注入(inject)

javascript - Chrome Extension API : chrome. tabs.captureVisibleTab 在后台页面到内容脚本

javascript - 仅允许来 self 的 chrome 扩展程序的请求

javascript - 打开新标签页后 Chrome 扩展程序退出运行 javascript

javascript - 如何在url中传递一个字符串数组

javascript - 为什么变量的值在增加之前会发生变化?

javascript - JQuery 函数不会在页面加载时触发它仅在我刷新页面或再次重新访问同一页面后才起作用

javascript - 将 D3 包含在 ERB 循环中