4

Safari拡張機能を作成しています。新しいタブ/ウィンドウを選択した URL に手動で設定するにはどうすればよいですか? この投稿のいくつかのロジックを使用して、ユーザーが作成したタブ/ウィンドウのSafari 拡張機能のみを引き継いでいることを確認しました: 完全に新しいタブのイベント?

新しいタブ イベント リスナーをセットアップします。

safari.application.addEventListener("open", handleOpen, true);

これを使用して、開いているタブ/ウィンドウを処理します。

function handleOpen(e) {
    if (e.target instanceof SafariBrowserTab) {
        e.target.addEventListener('beforeNavigate', handleBeforeNavigate, false);
        setTimeout(function () {
            e.target.removeEventListener('beforeNavigate', handleBeforeNavigate, false);
            takeOverTab();
        }, 50);
    }
}

function handleBeforeNavigate(e) {
    e.target.removeEventListener('beforeNavigate', handleBeforeNavigate, false);
    if (e.url === null) {
        takeOverTab();
    }
}

function takeOverTab() {
window.location.href = "http://www.yahoo.com";
}

新しいタブ/ウィンドウが開いたときにアラートを出すことはできますが、実際に URL を参照する方法を理解することはできません。window.location.href を試しましたが、何もしないようです。新しいタブを開くと、「トップ サイト」ページが表示されます。

前もって感謝します!

4

1 に答える 1

4

takeOverTab関数を次のように変更します。

function takeOverTab(tab) {
    tab.url = "http://www.yahoo.com";
}

関数呼び出しを変更して、タブへの参照を含めます。

takeOverTab(e.target);

また、beforeNavigateハンドラーでe.preventDefault()、タブがロードしようとしていたものをロードしないように追加する必要があります。

function handleBeforeNavigate(e) {
    e.target.removeEventListener('beforeNavigate', handleBeforeNavigate, false);
    if (e.url === null) {
        e.preventDefault();
        takeOverTab();
    }
}
于 2012-04-16T21:34:41.860 に答える