Silverlight 版本 : 5.1.30514.0
處理公司的產品跨瀏覽器時遇到的問題
Silverlight 上面某個按鈕,IE 跟 Firefox 點下去可以正常執行,偏偏 Chrome 就當掉了....
追程式的過程....
原本是用偵錯下去 F11 一行一行看
結果常常看到一半 Chrome 判定 Silverlight 太久沒回應,同樣拋出 Silverlight 沒有反應的警告問我要不要繼續等
所以這個方法打槍 0rz
後來想到可以用下偵錯 log 的方式
System.Diagnostics.Debug.WriteLine("passing by ");
然後就可以在偵錯的輸出那個頁籤上看到偵錯工具到底經過了那些地方
但因為產品的那顆按鈕點下去之後實在是做太多事情了,
只好改開大絕用 mark 程式碼的方式 XDrz,看 mark 到哪邊之後 Chrome 就不會當表示那一區有鬼
mark 到最後發現大致是三個問題
第一個跟第二個分別是
System.Windows.Browser.HtmlPage.Window.Alert("Hi!");
System.Windows.Browser.HtmlPage.Window.Confirm("Say Yes!");
第三個問題是使用 InvokeSelf 去呼叫 javascript 時,javascript 內有 window.showModalDialog()
ScriptObject sObj = HtmlPage.Window.GetProperty("FnjsFunction") as ScriptObject;
object obj = sObj.InvokeSelf(stringUrl);
前兩個問題可以改用
MessageBox.Show("Message");
跟
MessageBox.Show("Question?", "詢問", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
至於後面這個問題...
Chrome 在 37 版之後也直接捨棄對 showModalDialog 的支援了,所以現在沒有當掉的問題(是想撈回傳值都有問題0rz0rz),要改用 window.open 搭配 [ScriptableMember()] 讓 javscript 呼叫塞回傳值的方式來解 0rz
沒有留言:
張貼留言