2012-09-12 196 views
5

我在開發Chrome擴展時遇到了問題。在Chrome擴展中加載內容腳本

我有內容的腳本:

window.addEventListener("load",function(){ 
    var html = document.getElementsByTagName('html')[0]; 
    var title = document.getElementsByTagName('title')[0].innerHTML; 
    if(html){ 
     chrome.extension.sendRequest({akce: 'content', title: title},function(response){}); 
     alert(title); 
    } 
},false); 

然後我有一個BG頁:

chrome.extension.onRequest.addListener(function(request,sender,sendResponse){ 
    if(request.akce == 'content'){ 
     console.log(request.title); 
    } 
}); 

的問題是,當我開始輸入到地址欄,我的內容腳本加載在網站上這是自動完成列表中的第一個。正如您在下面的屏幕截圖中看到的,內容腳本在我點擊地址欄中的輸入之前被加載,並在我尚未加入的網站上加載。

我不知道發生了什麼事。請幫助我。

screenshot

回答

4

解決方案是從後臺頁面注入腳本。

示例:從BG頁

chrome.tabs.executeScript(tabId,{ 
    code: "chrome.extension.sendRequest({action: 'content_refer', url: document.referrer},function(response){});" 
}); 

chrome.extension.onRequest.addListener(function(request,sender,sendResponse){ 
    if(request.action == 'content_refer'){ 
     wipstats.allPages[sender.tab.id].ref = request.url; 
    } 
}); 
0

我猜你已經啓用了在Chrome中稱爲「即時瀏覽」選項,我有同樣的問題,前一段時間,並準確,因爲這個原因,我禁用了,從來沒有使用過它了。

+0

得到引薦,但是這不是我有用的,因爲我想我的分佈擴展的客戶,我認爲我不能禁用客戶機上的「即時瀏覽」 :( – tomash

+0

是的,你是對的,但我不喜歡這個選項的鉻,我相信這是一個谷歌必須解決的問題,因爲開發人員在這裏不能做任何事情。也許這是一件好事,不是加載擴展,而即時瀏覽打開並加載後,用戶點擊輸入,但我相信這是谷歌必須解決 – haynar

+0

還有一件事,我不知道,但也許有一些鉻特定的DOM事件是可能的爲了解決這種情況並處理這種情況,這將是另一個好辦法...... – haynar

相關問題