2012-07-13 39 views
0

我做了一個簡單的自動錶單填充,通過將信息從創建的html發送到背景,然後發送內容腳本,因此注入的腳本可以更改表單上的信息。是否有可能在不重新加載的情況下運行注入的腳本?

我知道內容腳本在頁面加載後運行。我想知道是否可以再次運行內容腳本,而無需重新加載頁面。

我在內容腳本中獲得了sendRequest函數,我用它來確保它獲取信息,只有當頁面準備就緒時。然後將信息添加到表單中,並等待我發送。

在內容腳本中,我添加了一個onRequest,它起作用(它獲取信息)。但是,除非我正在對頁面進行重新編碼,否則我沒有看到表單上的更改。

我想知道是否有可能做,如果它做什麼科目,我應該學會實現這一點。

我是新的鉻擴展,我仍然在學習:) 在1頁,我使用jQuery,所以與jQuery的答案也會很好。

+0

請張貼一些相關的代碼。 – dmck 2012-07-13 15:12:57

+0

我添加了一些代碼:) – samy 2012-07-13 15:44:47

回答

1

我發現,如果我們創建了一個chrome.tabs.sendRequest背景我們可以從內容腳本使用chrome.extestion.onRequest,它會執行每次becuse他們都在同一時間的allmost運行。

chrome.tabs.query({}, function (tabs) { 
     for (var i = 0; i < tabs.length; i++) { 
      chrome.tabs.sendRequest(tabs[i].id, {...requests u want to send }, function (response) { 

      }); 

     } 
    }); 

內容腳本

chrome.extension.onRequest.addListener(function (request, sender, sendRespons) { 
     //get requested info here 
     //call functions. 

     sendResponse({}); //send info back to background page. 
}); 
1

表單的目標可能是一個iframe,它可以避免頁面重新加載。不知道它會是多麼有用。

+0

我有幾個標籤打開,所以我不認爲iframe會幫助我。謝謝 – samy 2012-07-13 15:36:54

1

再次執行內容腳本正確的方法是使用chrome.tabs.executeScript方法

,所以我從背景一樣。它收到兩個參數。第一個參數是tabId,可以通過多種方式獲得,例如one of the chrome.tabs events。使用null在當前選定的選項卡中執行內容腳本(注意:這也可能是活動的開發工具窗口!)。

例子:

// Reloads the current tab 
chrome.tabs.executeScript(null, {code:'location.reload();'}); 

// Executes contentscript.js in the current tab 
chrome.tabs.executeScript(null, {file:'contentscript.js'}); 

// Executes contentscript.js in all frames in the current tab 
chrome.tabs.executeScript(null, {file:'contentscript.js', allFrames: true}); 

// Receives message from content script, and execute a content script: 
chrome.extension.onMessage.addListener(function(details) { 
    if (details.message === 'load a content script') { 
     chrome.tabs.executeScript(details.sender.tab.id, {file: 'a_script.js'}); 
    } 
}); 
    // The previous one is activated from a content script, as follows: 
    chrome.extension.sendMessage('load a content script'); 

onMessagesendMessage必須用來代替onRequestsendRequest,因爲Chrome瀏覽器20)

相關問題