我在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
已过时,有什么替代方案?
答案 0 :(得分:12)
您应该使用Windows.UI.Popups.MessageDialog
:
(new Windows.UI.Popups.MessageDialog("Content", "Title")).showAsync().done();
但是,你应该知道:
我回答了另一个问题here。这是允许您呼叫警报并在飞行中有多条消息的代码:
(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();
}
})();
答案 1 :(得分:2)
请记住,alert
不是JavaScript函数,它是一个浏览器(主机)函数,因此,它在非浏览器环境中不可用。
This link告诉您执行以下操作
使用触发事件window.external.notify("message")
;
在webview中使用scriptnotify事件来获取该消息。
显示地铁自己的对话框:MessageDialog
答案 2 :(得分: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());
}
}
}