2012-04-15 16 views
4

私はサファリ拡張機能を作成しています。自分の選択したURLに手動で新しいタブ/ウィンドウを設定するにはどうすればよいですか?私は私が唯一のユーザが作成したタブ/ウィンドウを引き継いでいますことを確認するために、このポストからロジックの一部を使用Safari extension: Event for a completely new tab?私は私の新しいタブイベントリスナー設定Safari拡張機能の新しいタブ/ウィンドウURLを設定する

:オープンタブを処理するために、これを使用し

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
次のようにあなたの 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(); 
    } 
} 
+0

これは、新しいタブで開いているすべてのURLをyahooに変更します... –

+0

@canisbos(有用な)回答は機能しますが、ここで誰も混乱しないので、 'tab'を' e'と交換しますこの例の残りの部分で使用されています。したがって、例に沿っていたい場合は、 'function takeOverTab(e){e.url =" http://www.yahoo.com ";}' –

+0

を使用してください。いいえ、タイラー、あなたはそうしません。 eはイベント全体です。タブはe.targetで、これはタブです。 variable.propertyポインタに同じ変数名を使用するだけで問題が生じることがあります。 –

関連する問題