2011-04-13 171 views
0

我有用C#寫的網頁抓取appliaction,使用WebBrowserIE9搞砸了我的應用程序

它的一個特點是它可以讓用戶編寫一個在網頁中被注入和調用的javascript函數。這是一個用戶自定義的函數,它接收一個C#對象作爲參數,其中包含一個名爲UserData的屬性,用戶可以使用它來存儲他想要的任何內容,並且即使在瀏覽器導航到另一個頁面後,它也會保留在那裏。它還包含一個Browser對象,我將在此僅以此爲例。

如果我注射,並呼籲我已經安裝了IE8在下列功能:

function ToBeInjected(Global) 
{ 
    function Data() 
    { 
     this.csObject = Global.Browser; 
     this.jsObject = "hi"; 
    } 

    Global.UserData = new Data(); 
} 

然後導航到另一個頁面,並注入和調用此函數:

function ToBeInjected(Global) 
{ 
    alert(Global.UserData.jsObject); // works ok on IE8 and IE9 (shows "hi") 
    alert(Global.UserData.csObject); // works on IE8 (show the object's type) but not IE9 ("Permission Denied" error) 
} 

第二alert不能正常工作,並顯示我的Browser對象的類型(此處傳遞的Global對象與前一個函數是同一個對象)。

我知道瀏覽器導航後對象存在似乎很奇怪,但它確實存在,並且它始終如此,並且從來沒有出現過問題,我的應用程序將此用作特徵。

但現在我剛剛安裝IE9和,物體仍然停留,但在這種特殊情況下在其上UserData是包含指針(或不過你會稱呼它)到外部C#中的JavaScript對象(Data對象)對象(Browser對象),我得到了「權限被拒絕」的JavaScript錯誤。 (如果我不在同一頁面中導航和運行這兩個腳本,它在兩個IE版本上都可以正常工作。)

我知道我的示例沒用,但它只是一個示例。在其他情況下,有一個JavaScript對象包含指向外部C#對象的對象是很有用的。

所以,即使這是一個超級特定的問題,你有任何建議我可以做些什麼來解決它或爲什麼我有這個問題與IE9?

+0

Javascript能夠解決系統中「瀏覽器外部」的問題是一個可怕的概念。瀏覽器安全系統中的任何漏洞,即使得到充分保護,都會被利用。 – 2011-04-13 03:52:44

+0

無論如何,瀏覽器安全系統中的任何漏洞總會被利用。儘管如此,我認爲這對我的情況不會有任何問題。 – Juan 2011-04-13 03:57:41

+0

這不是一個安全問題,因爲瀏覽器只能訪問你放在那裏的東西。 – Gabe 2011-04-13 04:05:59

回答

0

這聽起來像你想要數據在頁面之間保持。您是否考慮過以下任一項:

  1. 將用戶數據存儲爲Cookie。在後續頁面加載時重新讀取它們

  2. 使用window.external在您的C#代碼中託管一個在頁面之間存在的對象。

+0

好吧,我剛剛使用window.external測試,但它給了我完全相同的問題。餅乾是文本,因此對於我的特殊情況也沒有用處:( – Juan 2011-04-13 04:07:46

+0

Cookie只能在給定域中使用,只能包含文本,並且對總大小有相當嚴格的限制。 – Gabe 2011-04-13 04:08:54

+0

@jsoldi:你是如何使用'window.external'來獲取該錯誤的? – Gabe 2011-04-13 04:29:49