سؤال

كما تعلم، فإن إجراء طلبات Cross Domain XMLHTTP غير مسموح به لأسباب أمنية ضمن Internet Explorer.

لدي عنصر تحكم WebBrowser وأستخدمه DocumentText بدلاً من Navigate إلى عنوان URL.منذ المجال الحالي about:blank عندما تحاول الصفحة تقديم طلب إلى نفسها أو إلى مجال آخر أحصل عليه Access is denied خطأ في جافا سكريبت.

حتى عندما أستخدم 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: emp emp.html) ثم قم بتعديل محتواه عبر جافا سكريبت.

بعد هذه النقطة، لم تعد هناك قيود على CrossDomain ولكن استخدام document.write يسبب مشاكل سيئة أخرى مثل JQuery .ready لن تعمل الوظائف.

نصائح أخرى

التحقق من هذا، عملت بالنسبة لي مثل السحر.http://support.microsoft.com/default.aspx?scid=kb;en-us;246227

لا أفهم في أي مجال لا يمكنك الوصول إلى Javascript...هل حاولت استخدام النصي علامة للحصول على البيانات التي تريدها من مجال مختلف؟يمكنك استخدام ال JSONP مصطلح لمساحة اسم البيانات ...

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

ثم على "/ البيانات":

myFunction({
    // data here
});

يبدو أن URLACTION-CROSS-DOMAIN-DATA هو الاتجاه الصحيح:اقرأ هذا لتعرف السبب

الطريقة الوحيدة للقيام بذلك هي التأكد من تشغيل التعليمات البرمجية الخاصة بك في المنطقة الموثوقة (أو أعلى مثل HTA).بشكل افتراضي، يتم تشغيل أي شيء يتم تشغيله داخل عنصر تحكم WebBrowser في المنطقة التي تأتي منها الملفات التي يتم تقديمها.(أي.يتم استخدام سياسات أمان IE القياسية.)

لتغيير هذا السلوك، ستحتاج إلى تغيير التطبيق الذي يستضيف عنصر تحكم WebBrowser وتنفيذ بعض الواجهات على عنصر تحكم WebBrowser هذا.(IInternetHostSecurityManager وIInternetZoneManager وIInternetSecurityMgrSite هي تلك التي يجب عليك إلقاء نظرة عليها.) هذه ليست مهمة تافهة والوثائق المتعلقة بهذا نادرة في أحسن الأحوال.

بمجرد الانتهاء من ذلك، يمكن تشغيل التعليمات البرمجية الخاصة بك بأي امتيازات تحتاجها، وتكون الطلبات عبر النطاقات بنفس سهولة إعادة تعيين أعلى النتائج في Mime-Sweeper.

أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top