What is the alternative to `alert` in metro apps?

我只是一个虾纸丫 提交于 2019-12-19 10:26:10

问题


I created my first app on Windows 8 vs 2012 and it runs and works fine. But when I try to say "helloworld" from JavaScript like this:

alert("Hello World");

I get an error:

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

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

What is the alternative if alert is obsolete?


回答1:


You should use Windows.UI.Popups.MessageDialog:

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

However, you should be aware that:

  • This is not blocking like the familiar alert
  • Because it's not blocking you may try to show them multiple messages boxes; this isn't allow.

I answered another question like this here. Here's the code to allow you to call alert, and have multiple messages in flight:

(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();
    }
})();



回答2:


Remember that alert is not a JavaScript function, it's a browser (host) function, therefore, it's not available in non browser environments.

This link tells you to do the following

  • Replace all alert functions with firing an event window.external.notify("message");

  • Use scriptnotify event in webview to get that message.

  • Show metro own dialog: MessageDialog




回答3:


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());
        }

    }

}


来源:https://stackoverflow.com/questions/13652413/what-is-the-alternative-to-alert-in-metro-apps

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!