2012-02-12 76 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