2

Windows 8 vs 2012 で最初のアプリを作成しましたが、正常に動作します。しかし、次のように JavaScript から「helloworld」と言おうとすると:

alert("Hello World");

エラーが発生します:

Unhandled exception at line 21,
 column 13 in ms-appx://1af489cf-bac6-419b-8542-fdc18bdd2747/default.html

0x800a1391 - JavaScript runtime error: 'alert' is undefined

alert廃止された場合の代替手段は何ですか?

4

3 に答える 3

12

使用する必要がありますWindows.UI.Popups.MessageDialog

(new Windows.UI.Popups.MessageDialog("Content", "Title")).showAsync().done();

ただし、次の点に注意してください。

  • これは、おなじみのアラートのようなブロックではありません
  • ブロックされていないため、複数のメッセージ ボックスを表示することができます。これは許されません。

私はここでこのような別の質問に答えました. アラートを呼び出し、複数のメッセージを送信できるようにするコードは次のとおりです。

(function () {
    var alertsToShow = [];
    var dialogVisible = false;

    function showPendingAlerts() {
        if (dialogVisible || !alertsToShow.length) {
            return;
        }

        dialogVisible = true;
        (new Windows.UI.Popups.MessageDialog(alertsToShow.shift())).showAsync().done(function () {
            dialogVisible = false;
            showPendingAlerts();
        })
    }
    window.alert = function (message) {
        if (window.console && window.console.log) {
            window.console.log(message);
        }

        alertsToShow.push(message);
        showPendingAlerts();
    }
})();
于 2012-12-01T01:06:41.770 に答える
2

これは JavaScript 関数でalertはなく、ブラウザ (ホスト) 関数であるため、ブラウザ以外の環境では使用できないことに注意してください。

このリンクは、次のことを行うように指示します

  • すべてのアラート機能をイベントの発生に置き換えますwindow.external.notify("message")

  • そのメッセージを取得するには、webview で scriptnotify イベントを使用します。

  • メトロ独自のダイアログを表示: MessageDialog

于 2012-11-30T20:17:01.837 に答える
0

JavaScript:

 (function () {

  window.alert = function (message) {
      window.external.notify( message);
  }
//do some test
alert("a");
alert("b");
alert("c");
window.setInterval(function () {
    alert("e");
    alert("f");
}, 5000);
window.setInterval(function () { 
    alert("d");
    alert("2");
}, 10000);
 })();

C#:

  //register ScriptNotify event
  webView2.ScriptNotify += webView2_ScriptNotify;

async void webView2_ScriptNotify(object sender, NotifyEventArgs e)
    {
        MSG.Alert(e.Value);
    }


public class MSG
{
    static List<string> messages = new List<string>();


    public static void Alert(string message)
    {

        messages.Add(message);
        if (messages.Count == 1)
        {
              Show(messages.First());
        }

    }

    private static async Task Show(string message)
    {
        MessageDialog md = new MessageDialog(message, "Title");

        md.Commands.Add(
           new UICommand("OK", new UICommandInvokedHandler((cmd) =>
           {
               messages.RemoveAt(0);

           })));



        await md.ShowAsync();

        while (messages.Count > 0)
        {

            await Show(messages.First());
        }

    }

}
于 2013-08-27T03:44:04.313 に答える