Расширение Safari, откройте URL в новой вкладке из всплывающего окна - PullRequest
2 голосов
/ 08 сентября 2011

Мое расширение открывает всплывающее окно из globalpage.html

safari.application.openBrowserWindow()

Я хотел бы открыть URL-адрес из всплывающего окна в новой вкладке главного окна. У меня нет доступа к

safari.extension.globalPage

или

safari.application.xxxxx

Ответы [ 2 ]

4 голосов
/ 09 сентября 2011

Из введенного вами скрипта вам нужно отправить сообщение на глобальную страницу, в котором говорится открыть новую вкладку.

В введенном скрипте:

safari.self.tab.dispatchMessage('openUrlInNewTab', 'http://www.example.com/');

// the message name 'openUrlInNewTab' is arbitrary

В скрипте глобальной страницы:

function handleMessage(msgEvent) {
    if (msgEvent.name == 'openUrlInNewTab') {
        safari.application.activeBrowserWindow.openTab().url = msgEvent.message;
    }
}

safari.application.addEventListener('message', handleMessage, false);

(Вот соответствующий раздел руководства по разработке расширений Safari.)

Однако, если вы хотите открыть новую вкладку в другом окне, а не в самом верхнем (которое в вашем случае предположительно будет вашим всплывающим окном), вам нужно как-то идентифицировать другое окно. Например, перед тем, как открыть всплывающее окно, вы можете скопировать активное окно в переменную, например:

var targetWin = safari.application.activeBrowserWindow;

Затем, когда вы хотите открыть в нем новую вкладку, используйте:

targetWin.openTab().url = msgEvent.message;
1 голос
/ 03 ноября 2011

Это сработало для меня.Он связан с элементом панели инструментов командой «myCommand».Мне не нужно было добавлять сценарий внедрения, и я просто поместил его в мой файл global.html.

Существует отключение, если на вкладке не загружен URL-адрес, но я отключил его, отметивстрока, начинающаяся в "event.target.disabled ..."

<script type="text/javascript" charset="utf-8">
function performCommand(event)
{
    if (event.command === "myCommand") {
    safari.application.activeBrowserWindow.openTab().url = "http://www.yourdomain.com/";   
 }
}
function validateCommand(event)
{
    if (event.command === "myCommand") {
        // Disable the button if there is no URL loaded in the tab.
       // event.target.disabled = !event.target.browserWindow.activeTab.url;
    }
}

// if event handlers are in the global HTML page,
// register with application:
safari.application.addEventListener("command", performCommand, true);
safari.application.addEventListener("validate", validateCommand, true);
</script>
...