2012-01-17 17 views
1

我遇到與WinForms WebBrowser控件和onbeforeunload javascript事件處理完全相同的問題(How to intercept the onbeforeunload event in a WebBrowser control?)。我試着用同樣的解決方案將onbeforeunload事件強制轉換爲IDispatch並調用Invoke方法。如何使用winform webbrowser處理onbeforeunload事件

小時= -2147352319

我使用的是IE 6.0在WinXP開發.NET 3.5中:當這樣做我得到這個錯誤。

我沒有把C#代碼放在這裏,因爲它與上面鏈接的文章完全一樣。

的JavaScript代碼是:

function onBeforeUnload() 
{ 
    if (window.cObject.isTransferred) 
    { 
     event.returnValue = "\nYou are requesting to exit.\n";     
    } 
    else 
    { 
     event.returnValue = "\nYou are DELETING this object!!!\n"; 
    } 
} 
+0

有點OT,但IE6,真的嗎?它已經超過10年了,甚至微軟也不想再支持它,請參閱http://www.ie6countdown.com/。只是猜測,但你會收到與另一個版本的瀏覽器相同的錯誤? – Abel 2012-01-17 14:57:23

+0

我知道我會收到關於IE6的評論。不幸的是IE6,這是我目前生活的世界,並且必須繼續生活到今年第三季度的第二季度。 – 2012-01-17 15:26:44

回答

0

的誤差轉換爲0x80020101,這又轉化爲SCRIPT_E_REPORTEDhere's a how-to do this yourself)。微軟有一個confirmed bug,他們說在多核或多處理器計算機上經常發生,但也可能出現在單處理器計算機上。微軟解釋說它必須處理COM接口的調用。

這支持your referred to thread的故事,用戶最終遵循Hans Passant的回答,但收到此錯誤。通過更改P/Invoke聲明,他設法解決問題(答案寫在問題本身中)。

還有another source suggests這也可能意味着腳本本身有錯誤。如果是這樣,您應該能夠通過處理onScriptError來捕捉腳本錯誤。

我的建議:

  • 嘗試在提到線程所建議的替代方法(如果你還沒有嘗試的話)
  • onScriptError

編輯,創建一個處理程序:OP已經嘗試了一些建議,並發現這首先是一個JavaScript錯誤(我的第二個建議):而不是eventwindow.event應該已經被使用,或者如在Quirksmode article中描述的常見事件訪問技術。

+0

我確實已經有了另一種方法。我相信這個問題可能在javascript中。但是,當我將javascript更改爲不再出現錯誤時,Invoke的'result'參數總是返回爲null,因此出現沒有文本的消息框。 – 2012-01-17 17:14:58

+0

好的,我能夠找到一些JavaScript的工作。謝謝你幫助Abel。 – 2012-01-17 17:24:51

+0

@Edward可能意味着您以前使用的JS包含錯誤。例如,在上面的例子中,cObject不存在或者其他東西。 – Abel 2012-01-17 20:46:30