【问题标题】:Unable to show alert via Javascript in WP7 web browser control无法在 WP7 网络浏览器控件中通过 Javascript 显示警报
【发布时间】:2012-08-07 10:06:50
【问题描述】:

我正在尝试使用 WP7 中的 Web 浏览器控件在网页中使用 javascript 显示警报框。没有弹出警报。代码有什么问题还是WP7根本不支持?

在 Default.html 中

<html><br>
<head><br>
</head><br>
<body onload="onLoad()"><br>
    <script type="text/javascript"><br>
        function onLoad() {<br>
            alert("hello");<br>
        }<br>
    </script><br>
</body><br>
</html>

【问题讨论】:

    标签: javascript windows-phone-7 windows-phone-7.1 windows-phone windows-phone-7.1.1


    【解决方案1】:

    你能加载 default.html 资源吗?先看看http://blogs.msdn.com/b/dohollan/archive/2010/08/25/adventures-with-the-windows-phone-7-webbrowser-control.aspx

    更新后包含如何实现预期效果的示例代码:

    HTML:

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title></title>
        <script type="text/javascript" >
            function ShowNameAlert(name) {
                window.external.notify("Hello " + name);
            }
         </script>
     </head>
    <body onload="ShowNameAlert('Jojo');">
    Bla bla
    </body>
    </html>
    

    C# 代码隐藏:

    private void SomeBrowser_ScriptNotify(object sender, NotifyEventArgs e)
    {
        MessageBox.Show(e.Value);
    }
    

    XAML:

    <phone:WebBrowser x:Name="SomeBrowser" ScriptNotify="SomeBrowser_ScriptNotify" IsScriptEnabled="True" Source="test.html"/>
    

    【讨论】:

    • 页面正常打开,但提示未出现
    • 哦,太好了。我试图让警报也显示出来,但没有成功。我猜这可能与视觉构图有关。也就是说,window.prompt 通常呈现在 window 对象的顶部,但由于它现在嵌入到 silverlight 应用程序中,因此存在一些阻止这种情况的策略问题。 (附带说明,ScriptNotify 用于浏览器与 Silverlight 的通信,因此这不是让警报工作的桥梁。如果您想要一个示例代码来了解如何使用 ScriptNotify,那么我可以在这里写)
    • 谢谢,但我知道该怎么做。谢谢你的回答,我已经试过了。只是想知道代码或 WP7 策略是否有任何故障。尽管如此,你的答案仍然是正确的;)
    【解决方案2】:

    这就是我解决它的方法,我将 javascript 注入到我导航到的网页中,并覆盖了警报和确认框

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

    然后在脚本通知函数中使用 MessageBox 显示该消息。我希望它也对其他人有所帮助。以前的答案是一种解决方法,这是我认为是解决我的问题的正确方法

    【讨论】:

    • 我认为回答问题的人很难真正理解他们的解决方案是变通方法还是正确的。至少对我来说,您上面的建议也是解决方法,因为您正在修改您正在导航的页面的内容以适应您的应用程序的账单。简而言之,花时间了解人们在问什么并编写测试解决方案,让这些解决方案被接受(认为是正确的)然后被拒绝是没有动力的。
    • 我希望你能看到你所做的只是将我的示例中的 ShowNameAlert 别名为 window.alert!我希望您能将您对我的解决方案的决定恢复为答案:)
    • 您的解决方案也是正确的,但在这种情况下,我不得不修改我不想修改的 html 页面(这不是我的首要任务)。通过我在一些研究中发现的这一点,我能够通过我的 .cs 代码将 JS 添加到 html 页面。对于我的问题,这证明是正确的。这就是为什么我改变了这个答案。尽管我很欣赏您的回答作为此答案的补充。感谢您的帮助:)
    • 解决问题的方法不是注入 Javascript。这只是作为解决方案的变通方法的一种交付机制。另一种交付机制是修改 HTML 页面。问题是警报没有显示,我解释了为什么它没有显示,因此如何使用消息框获得效果。如果您问如何在不更改页面的情况下将解决方法传递到浏览器控件的内容中,那么我会告诉您。好吧,这很令人失望,让我们继续吧;)
    • 我的问题可能是错误的,谢谢 Gros 的帮助。我会记住下一次我发布一个问题来描述所有场景。谢谢你:)
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2018-04-10
    • 2017-08-07
    • 2011-06-18
    • 1970-01-01
    • 2023-02-05
    相关资源
    最近更新 更多