web-dev-qa-db-ja.com

WebBrowserコントロールとJavaScriptエラー

ブラウザ(ie9)でページにアクセスすると、ブラウザは正常にレンダリングされています。

WebBrowserコントロールを使用すると、JavaScriptエラーが発生します。

スクリプトエラーを抑制できることはわかっていますが、ページのレンダリングと機能に影響を与えるため、スクリプトエラーを正しく実行してください。

この問題を解決するにはどうすればよいですか? IE9をWindowsフォームに直接統合し、WebBrowserコントロールと同様の方法(ナビゲート、IDの取得、クリックの呼び出し)を使用できますか?

ありがとう。

21
user689792

オブジェクトをwebbrowser.ObjectForScriptingに割り当ててから、ホストアプリで外部スクリプトを呼び出すラッパーにwindown.onerrorを割り当てるJavaScript関数を挿入します。お気に入り:

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/

14
Alton Crossley

次のコード行を使用して、これらのタイプのエラーを取り除くことができます。

webBrowser1.ScriptErrorsSuppressed = true;

JavaScriptエラーの発生を防ぎます。

9
mgokhanbakal

IE9がインストールされている場合、この動作をレジストリ設定で上書きしない限り、WebBrowserはIE7モードを使用します-この StackOverflow answer で説明されています。これは、Webブラウザーで表示される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);
}
9
pgfearo

だから私は投稿が古いことを知っていますが、それは私にとって最近の問題であり、箱の外でいくつかの深刻な掘り下げと考えをしなければなりませんでした。

基本的にここでのほとんどの返信と同様です-最新のIEエンジンを使用するようにWebブラウザーコントロールを変更することはできません。鉱山はデフォルトでIE7を使用します。レジストリに関しては常に快適ではありません。この問題に対処するよりクリーンな方法は、Webサイトにコードを追加して、最新のIEエンジンを任意のPCで使用するように強制し、魅力。

閲覧しようとしているページのweb.configファイルにアクセスできる場合は、簡単な追加:

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

そしてあなたのサイトはあなたのコンピュータで最新のIEエンジンを実行するようにwebbrowserコントロールを強制します。他のオプションはここにあります:

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

これは、アクセスしようとしているWebサイト/アプリケーションのページ/ web.configにアクセスできる場合にのみ機能することを述べておかなければなりません。

7
Dannie Adia

WebBrowserコントロールはIE7を使用します。したがって、問題がある場合、スクリプトはIE7で機能せず、修正する必要があります。

IE9はコンピューターにインストールされているかどうかに依存し、誰もがIE9をインストールしているわけではないため、統合することはできません。

3
Oskar Kjellin

この問題を抱えている可能性のある人への助けとして、私はこれらすべてを試しましたが、何もうまくいきませんでした。これが機能するものです。 正確にこのエラーの原因はわかりませんが、VSで「F5」を押してアプリをデバッグすると、YourProject.vshost.exeがプロセス名として実行されるようです。コマンドラインから同じアプリを実行すると、YourProject.exeとして表示され、JavaScriptエラーが消えます。 IEがVSHOST経由でアプリを実行しているアプリを確認し、これが怪しいと判断し、JavaScriptが正しく読み込まれないようにすると思います。

だから...あなたの実行可能ファイルのプロジェクト設定に入ります。 「デバッグ」オプションを選択します。 「外部プログラムの開始」を選択します。 Debug\YourProgram.exe(YourProgram.vshost.exeではありません)を参照して選択します。保存して再コンパイルし、F5キーを押します。

すべてが通常どおり機能するようになり、Visual Studioが自動的にプロセスにアタッチします。

楽しい!

グレゴ

2