2010-11-30 3 views
3

Я пытаюсь создать свою собственную инфраструктуру XMLHttpRequest, чтобы узнать, как это работает внутри. Вещь, которая меня озадачивает, заключается в том, что я не могу найти, как поймать исключение «Такое же происхождение».Поймать ту же ошибку происхождения в Javascript?

Идея заключается в том, что я пытаюсь загрузить URL-адрес, если я получаю такое же исключение происхождения, я повторно запрашиваю URL-адрес через прокси-скрипт, локальный для сценария. Причина, по которой я делаю это, - это то, что мне нужно получить данные о производстве из изолированной программной среды, и я хочу, чтобы она была максимально прозрачной для самого скрипта.

Я знаю, что это плохая практика, но это наименее навязчивый способ сделать это на данный момент :)

Просто, чтобы очистить вещи - я не хочу, чтобы обойти такое же происхождение, я просто хочу, чтобы поймать потому что я могу что-то с этим сделать.

Вот код, который я в настоящее время использую для моего XHR:

var net = function (url, cb, setts){ 
    this.url = url; 
    this.cb = cb; 

    var oThis = this; 
    if (!this.xhr) { 
     this.xhr = new XMLHttpRequest(); 
     this.xhr.onreadystatechange = function() { 
      if (oThis.xhr.readyState == 4 && oThis.xhr.status == 200) { 
       document.body.innerHTML += "RS: "+oThis.xhr.readyState+"; ST:"+oThis.xhr.status+"; RP:"+oThis.xhr.responseText+"<br>"; 
      } 
      else { 
       // do some other stuff :) 
       document.body.innerHTML += "RS: "+oThis.xhr.readyState+"; ST:"+oThis.xhr.status+"; RP:"+oThis.xhr.responseText+"<br>"; 
      } 
     } 
    } 
    this.xhr.open("GET", url,true); 
    this.xhr.send(); 
} // It's WIP so don't be scared about the unused vars or hardcoded values :) 

Я попытался попробовать ... поймать вокруг xhr.send(); но безуспешно, все еще не могут поймать исключения.

Любые идеи или указатели будут очень признательны.

ответ

1
xhr.onreadystatechange = function() { 
    if (xhr.readyState==4) { 
     if (xhr.status==0) { 
      alert("denied"); 
     } else { 
      alert("allowed"); 
     } 
    } 
} 
1

Вы уверены, что на самом деле предполагается выбросить исключение? Я ничего не вижу в спецификациях: http://www.w3.org/TR/XMLHttpRequest/#exceptions Похоже, что это так. Виноват.

В любом случае вы всегда можете проверить домен входящей строки в домене страницы, на которой в данный момент находится пользователь.


FWIW, как вы можете видеть this jsFiddle (открыть Web Inspector), Chrome не действительно бросить исключение. Он просто говорит «Не удалось загрузить ресурс».

+1

Раздел 3.6.1: «Выдает исключение SECURITY_ERR, если источник url ​​не соответствует происхождению XMLHttpRequest». – Emmett 2010-11-30 21:30:14

+0

Ба, я слепой. Nevermind. – aditya 2010-11-30 21:32:48

Смежные вопросы