既製のASP HyperLinkコントロールを使用すると、IE 11でエラーSCRIPT5009が発生します:__doPostBackはここへのリンクで未定義です: http://msdn.Microsoft.com/ en-us/library/ie/xyf5fs0y(v = vs.94).aspx
これは、F12 devtoolsコンソールウィンドウに表示されます。
誰かがこれに遭遇しましたが、修正はありますか?これは本番環境です。
[〜#〜] edit [〜#〜]:ホットフィックスを適用しています http://support.Microsoft.com/kb/2600088 は私にとっては機能しませんでした、そしてIE 10はWindows 8ではうまく機能します。
Scott Hanselmanによる最新情報の最新記事があります。 http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx これらの修正を試みてこの質問を更新しますが、これはWindows 8.1およびIE11に隔離されているようです。
Webサーバーに.NET Framework 4.5をインストールすると解決します。
http://www.Microsoft.com/en-gb/download/details.aspx?id=3065
または、.NET Framework 4.5をインストールできない場合は、IE11用のMicrosoftホットフィックスがあります。 http://support.Microsoft.com/kb/2836939 (コメントをありがとう@Afract)
数日間同じ問題に取り組んだ後、私たちはこの解決策を見つけました:
新しい.browserファイルをApp_Browsersフォルダーに追加します。ファイルに「IE11.browser」という名前を付け、App_Browsersフォルダーが存在しない場合は作成します。
次に、上のリンクから本文を新しく作成したファイルにコピーして再デプロイするだけで、_doPostBackエラーは発生しなくなります。
ファイルの本文は次のようになります。
<browsers>
<browser id="IE11" parentID="Mozilla">
<identification>
<userAgent match="Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
<userAgent nonMatch="IEMobile" />
</identification>
<capture>
<userAgent match="Trident/(?'layoutVersion'\d+)" />
</capture>
<capabilities>
<capability name="browser" value="IE" />
<capability name="layoutEngine" value="Trident" />
<capability name="layoutEngineVersion" value="${layoutVersion}" />
<capability name="extra" value="${extra}" />
<capability name="isColor" value="true" />
<capability name="letters" value="${letters}" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="screenBitDepth" value="8" />
<capability name="type" value="IE${major}" />
<capability name="version" value="${version}" />
</capabilities>
</browser>
<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11,0) like Gecko -->
<browser id="IE110" parentID="IE11">
<identification>
<capability name="majorversion" match="11" />
</identification>
<capabilities>
<capability name="ecmascriptversion" value="3.0" />
<capability name="jscriptversion" value="5.6" />
<capability name="javascript" value="true" />
<capability name="javascriptversion" value="1.5" />
<capability name="msdomversion" value="${majorversion}.${minorversion}" />
<capability name="w3cdomversion" value="1.0" />
<capability name="ExchangeOmaSupported" value="true" />
<capability name="activexcontrols" value="true" />
<capability name="backgroundsounds" value="true" />
<capability name="cookies" value="true" />
<capability name="frames" value="true" />
<capability name="javaapplets" value="true" />
<capability name="supportsCallback" value="true" />
<capability name="supportsFileUpload" value="true" />
<capability name="supportsMultilineTextBoxDisplay" value="true" />
<capability name="supportsMaintainScrollPositionOnPostback" value="true" />
<capability name="supportsVCard" value="true" />
<capability name="supportsXmlHttp" value="true" />
<capability name="tables" value="true" />
<capability name="supportsAccessKeyAttribute" value="true" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
<capability name="vbscript" value="true" />
</capabilities>
</browser>
</browsers>
.Netのバージョンを4から4.5にアップグレードする必要はなく、すべてが正常に機能しています。
うまくいけば、これは同じイライラする問題を抱えている誰かを助けるでしょう!
マスターページに以下のスクリプトを配置すると、確実に修正されます。同様の問題があり、修正されました。
<script runat="server">
protected override void OnInit(EventArgs e)
{
Page.ClientTarget = "uplevel";
base.OnInit(e);
}
</script>
私たちのサーバーにFramework 4.5をインストールするには、赤いテープの沼を通り抜けてフォームに記入する必要があるので、ここで私がやったことです:
IE11フィックスを含むカスタム.browserファイルをダウンロードするためのリンクを見つけます。
Telerik_ie11_browser_file_fix.Zipをコンピューターに保存し、Telerik_IE11_fix.browserを解凍します。
Telerik_IE11_fix.browserをC:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsersのターゲットサーバーパスにコピーします。
サーバーで次のコマンドを実行します(hanselman修正ブログで確認)cd C:\ Windows\Microsoft.NET\Framework64\v4.0.30319(または使用しているフレームワークのバージョン)
C:\ Windows\Microsoft.NET\Framework64\v4.0.30319> aspnet_regbrowsers –iを実行します。
サーバーでiisresetを実行する
修正プログラムはどれも機能しませんでした。更新もie.browser
ファイル。 Windows Server 2008 R2を使用しています。
(.net 4.5へのアップグレードは別として)機能した唯一の解決策は、このスレッドに @ vishalによって提案されたスクリプト を追加することです。
IIS 7.5はIE= 11.で動作します。11を使用してWindows 2008のApp_Browsers(XMLについては上記を参照)にブラウザ構成ファイルを追加します。それ以外の場合、これははるかに簡単です。
ユーザーエージェントが変更されたため、IE11がAsp.netによって最新のブラウザーとして認識されないのは何が起こるかです。同じ状況の誰にとっても、100件の提案からの唯一の解決策は、setTimeoutを追加することでした。
以下のスニペットを使用する代わりに
__doPostBack('ButtonPostBack', "");
これを使う
setTimeout(function () { __doPostBack('ButtonPostBack', ""); }, 1);
Runnat = 'server'のフォームタグがないページを発見しました。これがページにない場合、ポストバックはコントロールをパスバックできず、背後にあるコードを適切に起動できません
基本的に何が起こっているかというと、2つの欠落したHTML非表示要素「eventtarget」と「eventargument」、および欠落した関数「__doPostBack」があります。
これらはDOMから欠落しています。
私はこれにリストされているすべての修正を試みましたが、どれもうまくいきませんでした。ただし、jqueryとjavascriptの組み合わせを使用すると、控えめな解決策があります。これをドキュメントのjavascriptに追加して準備ができたら、レースに出かけます。
if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) {
$('#YOUR_ASPNET_FORMID').prepend('<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />');
}
if (typeof __doPostBack == 'undefined') {
__doPostBack = function (eventTarget, eventArgument) { object
var theForm = document.forms['YOUR_ASPNET_FORMID'];
if (!theForm) {
theForm = document.YOUR_ASPNET_FORMID;
}
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
};
}
4.5をインストールすると、この問題が修正されることを理解しています。私は絶対にお勧めします。ただし、私と同じように、.net 4で作成されたcmsシステムを備えた企業向けのサイトで作業している場合は、プラットフォームの更新から作成された新しいバグを導入するのではなく、これがより簡単な解決策になる可能性があります。