簡體   English   中英

WebBrowser控件和JavaScript錯誤

[英]WebBrowser control and JavaScript errors

當我使用瀏覽器(ie9)訪問頁面時,瀏覽器呈現正常。

當我使用WebBrowser控件時,我有JavaScript錯誤。

我知道我可以抑制腳本錯誤,但我希望它們能夠正確運行,因為它們會影響頁面的呈現和功能。

我怎么解決這個問題 ? 我可以直接在Windows窗體中集成IE9,並使用類似於WebBrowser控件的方法(導航,獲取ID,調用點擊)?

謝謝。

我要做的是將一個對象分配給webbrowser.ObjectForScripting,然后注入一個javascript函數,將windown.onerror分配給一個調用主機應用程序中的外部腳本的包裝器。 喜歡:

window.onerror = function(message, url, lineNumber) 
{ 
  window.external.errorHandler(message, url, lineNumber);
}

參考: http ://notions.okuda.ca/2009/06/11/calling-javascript-in-a-webbrowser-control-from-c/

如果安裝了IE9,WebBrowser仍將使用IE7模式,除非您使用注冊表設置覆蓋此行為 - 如此StackOverflow答案中所述 這是您在WebBrowser中遇到的JavaScript錯誤的最可能原因(因為您在IE9中沒有看到相同的錯誤)。

您可以使用以下c#代碼進行注冊表設置(如果檢測到Windows 8,則設置IE10模式)並更改app-name.exe以匹配您自己的應用程序。 您應該為沒有足夠權限的情況添加錯誤處理程序(寫入此注冊表項需要管理員權限)。

string installkey = @"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
string entryLabel = "app-name.exe";
System.OperatingSystem osInfo = System.Environment.OSVersion;

string version = osInfo.Version.Major.ToString() + '.' + osInfo.Version.Minor.ToString();
uint editFlag = (uint)((version == "6.2") ? 0x2710 : 0x2328); // 6.2 = Windows 8 and therefore IE10

RegistryKey existingSubKey = Registry.LocalMachine.OpenSubKey(installkey, false); // readonly key

if (existingSubKey.GetValue(entryLabel) == null)
{
     existingSubKey = Registry.LocalMachine.OpenSubKey(installkey, true); // writable key
     existingSubKey.SetValue(entryLabel, unchecked((int)editFlag), RegistryValueKind.DWord);
}

您可以使用以下代碼行來消除這些類型的錯誤:

webBrowser1.ScriptErrorsSuppressed = true;

它可以防止出現JavaScript錯誤。

所以我知道這篇文章很老,但這對我來說是一個最近的問題,我不得不在盒子外面進行一些認真的挖掘和思考。

基本上像這里的大多數回復 - 你不能改變webbrowser控件使用最新的IE引擎。 我默認使用IE7,我看到一些回復基本上改變/添加到注冊表的東西,在注冊表時總是不舒服,解決這個問題的一個更簡潔的方法是在你的網站上附加強制它的代碼在任何一台電腦上使用最新的IE引擎,就像一個魅力。

如果您有權訪問要瀏覽的頁面的web.config文件,則簡單追加:

    <system.webServer>
<httpProtocol>
    <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
</httpProtocol>
</system.webServer>

並且您的站點將強制webbrowser控件在您的計算機上運行最新的IE引擎。 其他選項可在此處找到:

https://www.leapinggorilla.com/Blog/Read/1016/ie-ate-my-css---disabling-compatability-mode

我應該聲明,只有當您可以訪問您嘗試訪問的網站/應用程序的page / web.config時,這才有效 - 這就是我的情況。

WebBrowser控件使用IE7。 因此,如果出現問題,那么您的腳本不能用於IE7,您必須解決這個問題。

你不能集成IE9,因為它取決於它安裝在計算機上,並不是每個人都安裝了IE9。

作為對其他人可能有這個問題的幫助,我嘗試了所有這些東西,但對我來說沒有任何作用。 這是什么工作。 我不確定究竟是什么導致了這個錯誤,但顯然當你在VS中按“F5”調試你的應用程序時,它會運行YourProject.vshost.exe作為進程名稱。 如果從命令行運行相同的應用程序,它將顯示為YourProject.exe,並且javascript錯誤消失。 我認為IE看到應用程序通過VSHOST運行簽證,並決定這是可疑的,並禁用正確加載的JavaScript。

所以......進入你的可執行文件的項目設置。 選擇“調試”選項。 選擇“啟動外部程序”。 瀏覽並選擇Debug \\ YourProgram.exe(NOT YourProgram.vshost.exe)。 保存,重新編譯,然后點擊F5。

現在一切都應該按照慣例工作,Visual Studio甚至會自動為您處理這個過程。

請享用!

Grego

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM