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

前端 未结 3 1483
有刺的猬
有刺的猬 2021-01-14 20:55

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\         


        
相关标签:
3条回答
  • 2021-01-14 21:03

    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());
            }
    
        }
    
    }
    
    0 讨论(0)
  • 2021-01-14 21:05

    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();
        }
    })();
    
    0 讨论(0)
  • 2021-01-14 21:12

    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

    0 讨论(0)
提交回复
热议问题