2011-07-05 24 views
0

我知道有沒有辦法做到這一點,但有一種方法可以爲我的任務做具體的工作。我希望在內容腳本中儘快執行window.stop()命令,以便在打開30多個選項卡的情況下,可以使不活動的選項卡加速Google Chrome啓動。通常情況下,我會從內容腳本向background.html發送一個請求,以查找當前標籤是否處於非活動狀態,等待響應,然後執行window.stop()。但這是一個壞主意,因爲當同時加載30個標籤頁時,響應響應時間過長。所以我需要一個syncronus回調來在內容腳本激活後立即停止頁面。所以我想出了這個解決方案。在background.html我這樣做Syncronus在內容腳本和背景之間的回調.html

chrome.tabs.getAllInWindow(null, 
function(tabs) 
{ tabs.forEach(
    function(tab) 
    { //check if tab is active 
    //if it's not do chrome.tabs.update(tab.id, {url: "modified_url", selected: tab.selected}) 
    }) 
}) 

我嘗試2種方式來修改URL

1:google.com => google.com//

2:google.com =>谷歌。 COM ???

當內容腳本檢查window.location.href並發現有doubleslash或特里普爾問號它window.stop()

因此Chrome住我沒有時間去死亡,而它的加載:)

但儘管如此,這種方式並不完美。很多頁面會自動更正這些網址。當然這很粗魯。

所以也許有另一種方式來使用background.html做一些標籤,使內容腳本知道它,以避免消息傳遞?

+0

我試着用//和???在同一時間,似乎沒有任何修正它的網址仍然這樣做。 – plavozont

+0

哦,不,youtube不會與這個網址取笑 – plavozont

+0

也試過這個竅門:將url更改爲'「about:blank-> http://google.com」'似乎content_script不能在這樣的頁面上執行,並且executeScript也不行。 – plavozont

回答

0

什麼的來代替:

chrome.tabs.update(tab.id, {url: "modified_url", selected: tab.selected}); 

做:

chrome.tabs.executeScript(tab.id, {code: "window.close()"}); 
+0

你的意思是 'chrome.tabs.executeScript(tab.id,{code:「window.stop()」});' 不幸的是,如果這樣做不行,那很容易。 沒有其他的executeScript技巧可以工作,即使你說 'chrome.tabs.executeScript(tab.id,{code:「alert('!')」});' 當消息apear,整個頁面已經被加載。 – plavozont

0

我發現一個辦法,允許syncronously通過內容腳本和HTML背景之間boolean值。它涉及webRequest API。
我所做的是從內容腳本發送XMLHttpRequestwindow.location.href
然後,我在後臺html中捕獲該請求並檢查它的url,如果它是發送它的選項卡的url匹配url,我要麼取消請求,要麼讓它運行。
通過這種方式,內容腳本可以定義在後臺發生了什麼,因爲取消的請求
返回-1

相關問題