23

我正在嘗試創建一個Chrome擴展程序,它是Delicious小書籤的替代品。我知道這裏有一個擴展名,但擴展名的問題在於,在爲網站添加書籤後,彈出窗口保持打開狀態(與使用小書籤相反,彈出窗口在提交表單後自動關閉),我重新創建了延伸和遇到同樣的問題Google Chrome擴展程序創建的關閉彈出窗口

這裏是我的代碼:

manifest.json的:

{ 
    "name": "Delicious", 
    "version": "1.0", 
    "description": "Bookmark a site on Delicious", 
    "background_page": "background.html", 
    "permissions": [ 
    "tabs" 
    ], 
    "browser_action": { 
    "default_icon": "delicious.png" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["http://www.delicious.com/save*"], 
     "js": ["contentscript.js"] 
    } 
    ] 
} 

background.html:

<html><script> 
chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.getSelected(null, function(tab) { 
    w = window.open('http://delicious.com/save?url='+ 
      encodeURIComponent(tab.url)+ 
      '&title='+encodeURIComponent(tab.title)+ 
      '&v=5&noui=1&jump=close', 
     'deliciousuiv5', 
     'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'); 
    }); 
}); 
</script></html> 

contentscript.js:

if (document.URL == 'http://www.delicious.com/save') 
{ 
    alert('closing...'); 
    self.close(); 
    alert('should have closed by now'); 
} 

當我點擊按鈕美味,彈出來了很好,我可以保存書籤,但我點擊「保存」後,彈出不會關閉。兩個提醒都顯示出來,但self.close()似乎沒有任何操作。當我刪除contentscript.js中的URL檢查時,彈出窗口會正常顯示,第一個警報會立即觸發,然後彈出窗口會自動關閉(因爲它應該)。

爲什麼不能正常工作?它似乎並不像Chrome阻止我做self.close()。美味做什麼?還有別的嗎?如果你想他們

的文件是在這裏:[鏈接刪除,因爲drop.io歇業]

+0

該窗口會自動關閉。如果這有什麼不同,我正在運行一個相當默認的Chrome版本。 – 2010-10-16 22:21:42

回答

18

嘗試window.close(),但可能不會工作的。

由於您正在創建常規窗口(而不是瀏覽器操作彈出窗口),因此您可以使用背景頁面中的chrome.tabs.remove()關閉它。您也可以從背景頁面檢測到此窗口。就像:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    if(changeInfo.status == "loading") { 
     if(tab.url == "http://www.delicious.com/save") { 
      chrome.tabs.remove(tabId); 
     } 
    } 
}); 

我不知道Chrome如何對待創建的窗口 - 作爲選項卡或窗口。如果作爲窗口,那麼上面的代碼會有點不同。

+0

完美的作品,謝謝。 – 2010-10-17 00:27:24

+8

window.close()的作品。如果您想在向另一個標籤發送請求之後關閉彈出框,請確保關閉回調中的彈出窗口,並且必須至少發送一個空響應。 – 2012-02-08 21:47:08

9

我發現了一個非常簡單的解決方法。您只需設置所選標籤爲真,並彈出消失,像這樣...

// remove popup by selecting the tab 
chrome.tabs.getSelected(null, function(tab) { 
    chrome.tabs.update(tab.id, { selected: true }) 
}); 
+1

不適用於我。 – Nakilon 2012-12-12 07:38:00

+4

'chrome.tabs.getSelected'現在已經過時。 – 2013-07-26 20:40:47

0

我發現這個解決方案:chrome.tabs.update({ active: true });的這一行代碼關閉瀏覽器操作的彈出窗口。你甚至不需要在那裏傳遞tab.id,因爲默認情況下它被設置爲當前標籤的id。我在後臺頁面運行它,但似乎它可以在擴展中的任何地方運行。

+0

這不幸沒有爲我工作。我從本頁上發佈的類似getSelected()代碼進行更新,並且我編寫了此代碼,完全期望它能夠從文檔所說的內容開始工作。 – offthat 2013-09-16 01:40:45

+0

它可能取決於很多情況。你把這個方法的呼叫放在哪裏?也許在一些沒有調用的回調處理程序等等...... – 2013-09-16 10:47:55

+0

我結束了剛剛存儲對彈出窗口的引用,這樣我就可以調用popupRef.Close(),並且做到了這一點。 – offthat 2013-09-17 18:33:22

相關問題