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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值