質問

ご存知のとおり、Internet Explorerでのセキュリティ上の理由から、クロスドメインXMLHTTPリクエストの実行は許可されていません。

WebBrowserコントロールがあり、URLへの Navigate の代わりに DocumentText を使用しています。現在のドメインは about:blank であるため、ページがそれ自体または他のドメインにリクエストを行おうとすると、 Access is denied Javascriptエラーが発生します。

Navigate を使用しても、Javascriptが別のドメインにリクエストを行っても機能しません。

これを回避するにはどうすればよいですか

このHTMLコードはWebBrowserコントロールで動作するはずです:

<body>

<a href="javascript:getit('http://www.google.com')">this should work</a>
<div id="x"></div>

</body>

<script>
function XHConn()
{
  var xmlhttp, bComplete = false;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          fnDone(xmlhttp);
        }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}

function getit(url){
    var xmlhttp = new XHConn();
    var fnWhenDone = function (oXML) { document.getElementById('x').innerHTML = oXML.responseText; alert(oXML.responseText); };
    xmlhttp.connect(url, "GET", "", fnWhenDone);
}

</script>
役に立ちましたか?

解決

ダーティな回避策を見つけ、ローカルHTML(c:\ temp \ temp.html)をロードしてから、javascriptを介してその内容を変更します。

この時点以降、CrossDomainの制限はなくなりましたが、document.writeを使用すると、JQuery .ready 関数などの他の厄介な問題が発生します。

他のヒント

これを確認してください、それは私にとって魅力のように働きました。 http://support.microsoft.com/default.aspx? scid = kb; en-us; 246227

どのドメインでJavascriptにアクセスできないのかわかりません... script タグを使用して、別のドメインから必要なデータを取得しようとしましたか? JSONP イディオムを使用して、データの名前空間を設定できます...

var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "anotherdomain.com/data?callback=myFunction";
head.appendChild(script);

そして&quot; / data&quot;で:

myFunction({
    // data here
});

URLACTION-CROSS-DOMAIN-DATAは正しい方向のようです: これを読んで理由を確認してください

これを行う唯一の方法は、コードが信頼されたゾーン(またはHTAなどのより高い)で実行されることを確認することです。既定では、WebBrowserコントロール内で実行されているものはすべて、提供されるファイルが由来するゾーンで実行されます。 (つまり、標準のIEセキュリティポリシーが使用されています。)

この動作を変更するには、WebBrowserコントロールをホストしているアプリケーションを変更し、そのWebBrowserコントロールにいくつかのインターフェイスを実装する必要があります。 (IInternetHostSecurityManager、IInternetZoneManager、およびIInternetSecurityMgrSiteを確認する必要があります。)これは簡単な作業ではなく、これに関するドキュメントはほとんどありません。

これが完了すると、必要な特権でコードを実行でき、クロスドメインリクエストはMime-Sweeperのハイスコアをリセットするのと同じくらい簡単です。

これがお役に立てば幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top