4

我在 HTML 页面中有一个 Silverlight 应用程序。SL 插件托管在“对象”HTML 标记中。当用户关闭网页时,我想在我的 Silverlight 应用程序中调用一个函数。代码是这样的:

(简化的)HTML 代码:

<div id="silverlightControlHost">
    <object id="MyApp" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="source" value="ClientBin/MyApp.xap" />
        ...
        </object><iframe id="_sl_historyFrame"></iframe></div>

Javascript代码:

<script type="text/javascript">
    window.onbeforeunload = confirmExit;

    function confirmExit()
    {
        var control = document.getElementById("MyApp");
        var message = control.content.BrowserIntegration.MyAppFunction();

        if (message)
        {
            return message;
        }
    }
</script>

它曾经可以工作,但现在不再工作了,至少在 Internet Explorer 8 中是如此。HTML 对象 (control.content) 的内容属性未定义。奇怪的。该物业最近有变化吗?我很确定它在 2 个月前有效,并且在此之前很长一段时间都运作良好。该网站位于我的受信任站点中,并且我在 IE 中没有找到从那时起我更改的设置(可能有一两个,但扫描列表,我没有找到任何东西)。

当我使用 HTML 对象的“onLoad”事件进行测试时,内容已经未定义。

我不知道异常是它以前起作用还是现在不起作用。但如果有人能告诉我如何让它现在工作,它会让我很开心。

4

3 回答 3

0

我创建了一些从 IE 调用 Silverlight 代码的向导:

1)需要识别silverlight控件:添加“id”标签:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
            width="100%" height="100%" id="_sl_facebookapp">

2)需要从silverlight代码注册脚本对象:

HtmlPage.RegisterScriptableObject("FBSHandler", this);

3) 将需要的 silverlight 方法标记为 ScriptableMember:

[ScriptableMember]
        public void FBAuthorized(string authKey){}

4) 您应该使用已注册的脚本对象来调用 Silverlight 方法:

var silverlightCtrlId = '_sl_facebookapp';

function handleStatusResponse(response) {
    var control = document.getElementById(silverlightCtrlId);    
        var accessToken = response.authResponse.accessToken;
        if (control != null) {
            control.Content.FBSHandler.FBAuthorized(accessToken);
        }
    }
}

它工作正常。希望它会帮助你。

于 2012-05-29T06:10:27.630 回答
0

这些操作没有解决我的问题:

  • 检测和清除病毒
  • 降低IE8的安全级别
  • 重新安装 Internet Explorer 8
  • 重新安装 Silverlight 组件

这就是解决我的问题的方法:

  • 重新安装 Silverlight Developer 运行时

注意:我使用 MS Visual Studio 2010 进行 .NET 开发

于 2012-05-30T01:42:17.160 回答
0

我认为这是一个时间问题。您访问 Content 元素的代码可能在 Silverlight 组件完全加载之前执行。

我遇到了完全相同的问题,并通过使用 Javascript Timer 解决了它,直到元素完全加载。有趣的是,问题只出在 IE 上,其他浏览器都没有。

于 2012-09-05T08:42:47.103 回答