2012-05-28 32 views
4

我在HTML頁面中有一個Silverlight應用程序。 SL插件託管在「對象」HTML標記中。當用戶關閉網頁時,我想在我的Silverlight應用程序中調用一個函數。該代碼是這樣的:從IE中調用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)的content屬性未定義。奇怪。這個屬性最近有沒有變化?我非常肯定它在2個月前已經運行,並且在此之前它已經運行良好。該網站是在我的信任網站,我還沒有發現在IE瀏覽器中的設置,自那時起我已經改變(可能有一兩個,但掃描列表,我還沒有發現任何東西)。

當我使用HTML對象的「onLoad」事件進行測試時,內容已經是未定義的。

我不知道這個異常是事實,它以前工作或現在不工作。但如果有人能告訴我如何使它現在工作,它會讓我的一天。

+0

看看這個:http://msdn.microsoft.com/en-us/library/cc221414%28v=vs.95%29.aspx。 –

+0

@Lucas:我試過了(爲客戶端腳本訪問註冊託管代碼)。這就是我測試HTML對象的onLoad事件的方法。在這種情況下,內容(或內容)屬性也是未定義的。對你起作用嗎? 糟糕:我剛剛看到該頁末尾的註釋。我會檢查。 – ConnorsFan

+0

你的意思是跨域調用問題?讓我們知道這是否有幫助。 –

回答

0

這些行動並沒有解決我的問題:

  • 檢測並清除病毒
  • 降低安全性,在IE8
  • 重新安裝Internet Explorer 8的
  • 重新安裝Silverlight的組件

這是什麼解決了我的問題:

  • 重新安裝Silverlight的開發人員運行時

注:我使用微軟的Visual Studio 2010中的.NET開發

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); 
     } 
    } 
} 

它工作正常。希望它能幫助你。

+0

感謝您的代碼。事實上,這是我已經做的。但是control.Content是未定義的。這是我的問題。在這一點上,我正在尋找一個病毒問題或類似的東西。自昨天以來,我在各種網站上收到Javascript錯誤。由於Silverlight/Javascript代碼可以在其他計算機上運行,​​因此它會指向特定於我自己計算機的問題。 – ConnorsFan

0

我認爲這是一個時機的問題。訪問Content元素的代碼可能在Silverlight組件完全加載之前執行。

我有完全相同的問題,並通過使用JavaScript Timer解決它,直到完全加載元素。有趣的是,這個問題只與IE和其他瀏覽器沒有關係。