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

请记住,这alert不是 JavaScript 函数,而是浏览器(主机)函数,因此,它在非浏览器环境中不可用。

此链接告诉您执行以下操作

  • 用触发事件替换所有警报功能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 回答