12

ブラウザjavascriptで新しいウィンドウまたはタブを開くことはできますか?Windows Phone 7

window.openもサポートされていないようtarget='_blank'です。

ここで何か不足していますか?この基本的な機能は、iPhone と Android で問題なく動作します。Windows Phone 7 でこれを機能させる方法についてのアイデアはありますか?

4

3 に答える 3

28

Windows Phone 7では、これはプログラムでは不可能です。それはすべてユーザーの手に委ねられています。

マイクロソフトの従業員を引用するには:

「ユーザーは、リンクを長押ししてコンテキストメニューを表示することで、新しいタブでリンクを開くことができますが、新しいウィンドウをターゲットにするアンカーまたはスクリプトの要求は無視されます。

これにはいくつかの理由があります。

  • クロスウィンドウ通信はサポートされていません。
  • Windows Phoneにはブラウザのインス​​タンスが1つしかないため、新しい「ウィンドウ」をタブとして開く必要があります。
  • ブラウザエクスペリエンスは全画面表示であるため、ユーザーは、明示的に要求しない限り、新しいタブに移動したことを視覚的に示すことができません。
  • 新しいタブで「戻る」をナビゲートするとブラウザが終了し、新しいタブが作成されたことをユーザーが知らなかった場合、ユーザーは混乱します。」
于 2012-09-04T14:37:50.050 に答える
3

アプリ内ブラウザ制御にこの機能を追加しようとしている場合は、1つの方法を提案できます。

ブラウザコントロールがページを正常にロードできるすべてのWebページにjava-scriptを挿入する必要があります。java-scriptで、window.extern.notifyを使用ScriptNotifyして、コードビハインドで関数を呼び出します。適切なメッセージが検出されたら、ブラウザコントロールの新しいインスタンスを作成し、それを配列またはリストに追加します。これにより、アプリ内ブラウザ制御用の新しいタブ機能をエミュレートできます。

挿入されるJSコードは次のようになりますString NEW_TAB_FUNCTION = "window.open = function(__msg){window.external.notify('addnewtab');};";

を使用して注入することができますbrowser.InvokeScript("eval", NEW_TAB_FUNCTION);

ScriptNotifyでaddnewtab(keep IsScriptEnabled = True)をチェックします

    void WebBrowser_ScriptNotify(object sender, NotifyEventArgs e)
    {
        if (e.Value == "addnewtab")
        {   
            //do work here
        }
    }

JSのwindow.open関数を、ユーザー入力の通知を受け取るために新しいWebページに毎回挿入される関数でオーバーライドしたことに注意してください。

また、これはWebBrowser Controlでのみ機能し、外部ブラウザでは機能しないことに注意してください。

于 2012-09-05T04:15:00.683 に答える