zoukankan      html  css  js  c++  java
  • System.Windows.Browser.HtmlPage的javascript Invoke在Safari下无法工作

    为了让页面javascript订阅Silverlight控件的事件,会包装一个事件机制,最后内部通过调用HtmlPage的一些函数触发它,比如HtmlPage.Window.Eval、HtmlPage.Window.Invoke等。但是在Safari浏览器下这类交互无法成功,比如弹出一个消息框:

    HtmlPage.Window.Eval("alert('test');");
    HtmlPage.Window.Alert("test");
    HtmlPage.Window.Invoke("alert", "test");

    尝试添加一个按钮,并触发它的click事件去弹出消息框仍旧无法工作:

    HtmlElement btnTest = HtmlPage.Document.GetElementById("btnTest");
    
    if (btnTest != null)
        btnTest.Invoke("click");
    <input type="button" id="btnTest" onclick="btnTest_click(this)" />
    <script type="text/javascript">
        function btnTest_click(sender, e) {
            alert("test");
        }
    </script>

    要解决Safari上的这个限制,可以考虑通过由页面javascript轮询Silverlight控件机制。比如将需要执行的脚本存储到一个队列中,页面脚本获取到它并eval。

    为Silverlight控件的object元素添加onload事件订阅,window.onload、document.ready时Silverlight的代理客户端对象并未生成:

    <param name="onload" value="silverlight1_onload" />
    function silverlight1_onload(sender, e) {
        var host = document.getElementById("silverlight1");
        var clientApi = host.Content.Api;
    
        setInterval(function () {
            var script = clientApi.GetWaitScripts();
    
            if (script.length > 0)
                eval(script);
        }, 5000);
    }
  • 相关阅读:
    21. 合并两个有序链表
    169. 多数元素
    关于快速幂取模
    IO帮助类
    XML序列化
    字符操作普通帮助类
    判断是否是手机
    C#命名规范汇总12条
    xamarin android如何将Java.Lang.Object类型转成C#类型
    mqtt服务器apollo的搭建和测试工具paho的使用
  • 原文地址:https://www.cnblogs.com/junchu25/p/2944466.html
Copyright © 2011-2022 走看看