2012-02-12 77 views
1

运行我有希望被注入到文档之前加载脚本。即;仿佛Chrome扩展在文档开始

<script..>MYSCRIPT HERE</script> 

<html> 
. 
. 

我已经在Chrome浏览器脚本正确执行它应有的功能(我可以提醒(0)等),但,它运行在不同的环境,这是不是我想要的。我希望它作为页面在SAME环境中运行。

早些时候,我曾用在启动脚本中我用了

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!! 

^^这将迫使错误重新申报实际上加载,因此,当调用()时,什么都不会发生。 (巧了吧-_-?)

但现在,当我做了window.location =我实现了 “JS:..”,即使是运行在单独的ENV!

帮助! :)

回答

0

铬可能在当前构建一个错误的派斯指出。但是,是的,很多关于如何使用chrome扩展插入“文档”的知识。感谢迈克的职位。接下来的时间我使用greesemonkey或东西:)

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

你应该你的答案从“在文件装载注入”更改为“在文件开始注入”因为多数民众赞成具体是什么,他问的注入将记住这一点。伟大的东西寿,在文档开始工作(我想知道如何做到这一点)。 – PAEz 2012-02-14 07:27:33

+0

公平点。我草率使用'load'意味着'idle',但如果你真的需要在文档的开始注入脚本,你绝对有这样的选择。 :)我会更新我的答案。 – 2012-02-14 08:44:57

+0

感谢您的回复,迈克,尝试了解决方案,但它没有解决问题:( 测试: 。 。 开始脚本: s = document.createElement('script'); s.innerText ='const a = function(){};'; document.documentElement.appendChild(s); 它会附加到脚本的主体,但函数“a”正在重新声明。例如,如果我将函数重命名为“b”,我可以使用chrome脚本控制台访问页面中的“b”,但“a”正在被覆盖。任何方式来防止这种行为? – Akshay 2012-02-17 17:03:35