【问题标题】:C# WebView Doesn't Understand JavaScript Call of alert() (Windows 8 XAML Application)C# WebView 不理解 alert() 的 JavaScript 调用(Windows 8 XAML 应用程序)
【发布时间】:2012-08-08 15:50:04
【问题描述】:

我正在用 C# 和 XAML 编写一个 Windows 8 应用程序,它在 WebView 中托管一个网页。网页调用alert() 和confirm(),但WebView 抛出异常,说“'alert' 未定义”或“'confirm' 未定义”。可以启用警报()和确认(),还是我需要编写代码来模拟它们的正常功能?如果我需要自己写,我应该如何开始这样的工作?谢谢。

【问题讨论】:

    标签: c# javascript xaml webview windows-8


    【解决方案1】:

    警报和确认在 WebView 中不起作用。您可以使用WebView.ScriptNotify 接收来自页面上脚本的事件,并使用该事件通过MessageDialog class 显示对话框。

    在您想要警报的脚本中...

    window.external.notify('foo');
    

    并在您的 C# 中使用 WebView.ScriptNotify 方法中的示例。

    【讨论】:

    • 我实际上已经研究了这些选项,但是如果我使用 window.external.notify 进行确认,我如何在不对代码进行重大更改的情况下获得它的返回值?例如,我可以说,var answer=window.external.notify("confirm('Yes or no?')") 但是我怎样才能停止 JavaScript,让用户回答,然后将值返回给“回答”?
    • 也许 WebView.InvokeScript 会起作用。 msdn.microsoft.com/en-us/library/windows/apps/…
    • @user1325179 - 嗨,我在 WP 8.1 中遇到了类似的问题。你找到解决方案了吗?我可以显示带有确认消息的消息对话框,但是如何返回是/否?
    • @nipun.birla,我不得不编写 HTML 和 JavaScript 替换。例如,我必须创建一个带有“是”和“否”按钮的表单,而不是一个 confirm() 调用,然后将 JavaScript 函数附加到每个按钮。这都是异步的。一开始切换很困难,因为我不得不重写很多依赖于同步调用这类函数的代码,尤其是 alert()。
    • @user1325179 - 感谢您的回复,同时我找到了另一个解决方案:stackoverflow.com/questions/31804380/… O:)
    【解决方案2】:

    您需要做一些解决方法。我这样做了,它对我有用。

           window.alert = function(__msg){window.external.notify(' + __msg + ');};
    

    请参考我的一个类似问题的 windows phone here

    【讨论】:

      【解决方案3】:

      您需要编写代码来启用它们。请注意,在 HTML5 Win8 应用程序和 XAML 中都是如此。

      对于可以访问WinRT的脚本,可以使用Windows.UI.Popup.MessageDialog:

      (new Windows.UI.Popup.MessageDialog("Hello!", "Welcome")).showAsync().done(dismissedHandler)
      

      请注意,这些是异步的,并且不会阻止执行。

      为了从用户那里获取信息——例如用户输入的文本,没有任何标准,你需要为此创建一组新的标记。

      【讨论】:

        猜你喜欢
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多