2015-02-24 81 views
0

我正在研究主要在彈出窗口中工作的Chrome擴展。 我希望用戶在彈出窗口中的輸入字段中輸入一些文本(字符串),並且該字符串將用作我希望在特定頁面上注入並運行的腳本中的「變量」。在注入內容腳本之前傳遞變量

我試圖通過使內容腳本,將執行該腳本,使用下面的有據可查的方式實現這一目標:

var s = document.createElement('script'); 


s.src = chrome.runtime.getURL('pageSearch.js'); 
s.onload = function() { 
    this.parentNode.removeChild(this); 
}; 

(document.head||document.documentElement).appendChild(s); 

基本上,我想所有的方式將用戶的輸入代碼在page.js中執行頁面上的腳本之前。

什麼是最好的方法來解決這個問題?我不會收到任何有關擴展的信息。

謝謝。

+0

的可能重複的[Chrome擴展 - 消息從彈出傳遞到內容腳本](http://stackoverflow.com/questions/ 6108906/Chrome擴展消息傳遞從彈出到內容腳本) – levi 2015-02-24 20:25:32

+0

嘿,謝謝。這恐怕不能解決這個問題。 – 2015-02-25 07:38:11

回答

2

要將變量從彈出窗口傳遞到動態插入的內容腳本,請參見Pass a parameter to a content script injected using chrome.tabs.executeScript()

在獲取內容腳本中的變量後,有很多方法可以將變量獲取到頁面中的腳本。

E.g.通過在腳本標籤上設置屬性,並使用document.currentScript來訪問此<script>標籤。注:document.currentScript僅在文檔中插入標籤後立即引用腳本標籤。如果您稍後想要引用原始腳本標記(例如,在計時器或事件處理程序中),則必須將對腳本標記的引用保存在局部變量中。

內容的腳本:

var s = document.createElement('script'); 
s.dataset.variable = 'some string variable'; 
s.dataset.not_a_string = JSON.stringify({some: 'object'}); 
s.src = chrome.runtime.getURL('pageSearch.js'); 
s.onload = function() { 
    this.remove(); 
}; 
(document.head||document.documentElement).appendChild(s); 

pageSearch.js:

(function() { 
    var variable = document.currentScript.dataset.variable; 
    var not_a_string = JSON.parse(document.currentScript.dataset.not_a_string); 
    // TODO: Use variable or not_a_string. 
})(); 
+0

嗨,羅布,這正是我需要的缺失部分。我在整個網站上的其他評論也對我的學習有很大的幫助。非常感謝你。 – 2015-02-25 16:36:36

+0

@BorisAblamunits不客氣! – 2015-02-25 17:34:19