2016-08-15 137 views
9

我試圖建立一個Safari擴展,當用戶點擊Command + B時​​它會顯示彈出窗口。使用下面的代碼可以工作,但總是在不同的窗口上顯示彈出窗口而不是當前的窗口/選項卡。我希望它在當前窗口上顯示彈出窗口,而不是切換到另一個窗口並在那裏打開彈出窗口。如果只打開一個Safari窗口,但在打開多個窗口時開始出現問題,它可以很好地工作。Safari擴展顯示彈出窗口不同窗口

任何想法?

全球分頁文件

<script> 
    safari.application.addEventListener('message', function (e) { 
     if (e.name == 'Show Popover') { 
      safari.extension.toolbarItems[0].showPopover(); 
     } 
    }, false); 
</script> 

注入內容

document.addEventListener("keydown", keydown); 

function keydown(event) { 
    if (event.metaKey && event.keyCode == 66) { 
     event.preventDefault(); 
     safari.self.tab.dispatchMessage('Show Popover', {}); 
    } 
} 

回答

6

這是因爲你手動選擇這裏的第一toolbarItem;

safari.extension.toolbarItems[0].showPopover(); 

您需要確定彈出窗口需要出現在哪個toolbarItem上;

類似這樣;

var toolBarID = 'my_id'; 
var activeItem = safari.extension.toolbarItems.filter(function (button) { 
    return button.identifier == toolBarID && button.browserWindow == safari.application.activeBrowserWindow; 
})[0]; 

然後,您將此對象用於showPopover函數;

activeItem.showPopover(); 

希望這有助於

+0

大,看起來像它的工作!非常感謝您的幫助。一個注意事項是我必須將'toolbarItemId'更改爲我的實際toolbarItemId。如果您可以編輯您的答案以提供以供將來參考和提供給其他用戶,那將會很好。再次感謝。 –

+0

@CharlieFish沒問題,並哎呀我壞 - 更新:) – JayIsTooCommon

+0

再次感謝。只是讓你知道我將在7天結束時獎賞賞金。 :) –