[英]Chrome extension - open new tab when browser opened in background (Mac)
Chrome 37.0.2062.120,Chrome擴展程序。 MacBook Pro,MacOS 10.9.3。
授予權限后,新標簽頁將正常打開。
我使用Chrome通知,如果用戶單擊通知中的特定按鈕,則會打開新標簽。
當Chrome被“隱藏”(未完全關閉,但在后台運行時,當您單擊Mac Chrome左上角帶有叉的紅色氣泡)時,打開新標簽頁不會觸發瀏覽器“還原”(打開)。
因此,瀏覽器將保持隱藏狀態,並且不會打開任何選項卡(顯然不會打開,從技術上講是調用了回調)。
從background.js打開
// if user triggers new tab open from Chrome Notification
chrome.tabs.create({url:someUrl})
版本1 。 標簽頁顯然沒有打開,從技術上講,回調已被調用
第2版 。 下面的代碼更好,因為如果在創建選項卡時未聚焦於打開的窗口,它將聚焦於打開的窗口。 但是,不能解決原始問題。
chrome.tabs.create({url:someUrl}, function(tab){
chrome.windows.update(tab.windowId, {focused: true})
})
版3 。 我們開始吧,它在后台拋出錯誤:
Unchecked runtime.lastError while running tabs.create: No current window
非常感謝Xan。
function new_tab(url){
// trying to create a tab
chrome.tabs.create({url:url}, function(tab){
if(!tab) {
// probably no window available
chrome.windows.create({url:url},function(win){
// better to focus after window creation callback
chrome.windows.update(win.id, {focused: true})
})
} else {
// better to focus after tab creation callback
chrome.windows.update(tab.windowId, {focused: true})
}
})
}
當然,如果您需要傳遞額外的選項或回調,則需要修改此函數。
您需要使窗口聚焦:
chrome.tabs.create({url:someUrl}, function(tab){
chrome.windows.update(tab.windowId, {focused: true});
});
在沒有活動窗口的情況下,您需要對此進行說明並根據需要創建一個窗口:
chrome.tabs.create({url:someUrl}, function(tab){
if(!tab) {
// Probably, there was no active window
chrome.windows.create({url:someUrl, focused:true});
} else {
chrome.windows.update(tab.windowId, {focused: true});
}
});
請注意,這可能不遵守默認的窗口狀態(最大化/正常),但總比沒有好。 我在具有"background"
權限的擴展程序上對其進行了測試。
此答案僅適用於Linux和Mac(不適用於不存在相關bug的Windows)。
Chrome擴展程序無法將窗口聚焦,除非Chrome的至少一部分是當前活動的窗口。 我在一個月前報告了此錯誤,並詳細說明了要重現的問題,作為Issue 407817:桌面通知中的chrome.windows.create({focused:true})不會創建聚焦窗口 。
不幸的是,您不能在擴展程序中做任何事情。 如果是個人擴展,則可以創建一個本機消息傳遞主機並編寫一個將焦點放在新窗口上的本機應用程序(如果它不是個人擴展,則必須要求用戶也安裝該本機消息傳遞主機) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.