2015-10-09 5 views
0

Согласно caniuse.com и opera.com, Opera Mini не поддерживает CORS. Есть ли обходной путь? Могу ли я сделать запросы AJAX из/в другой домен или, по крайней мере, в субдомен в AngularJS?Обходной путь из-за отсутствия поддержки доменов AJAX в Opera Mini

+0

Вы пробовали 'jsonp'? Хотя вам нужно довольствоваться только методом GET. –

+0

i не могу использовать jsonp – aWebDeveloper

ответ

1

Используйте один из следующих обходных путей:

  • window.name может использоваться для обмена данными между доменами. Например:

    window.name=window.StackExchange; window.location="http://www.example.com"; console.log(window.name); 
    
  • DOM Level 3 Load and Save

Любое решение имеет свои недостатки, но никто, кроме Opera не позволяет data:URI, который не находится на том же домене. Как только parseURI может быть выполнен в сочетании с data:URI, возможности бесконечны - и очень сложно определить происхождение и содержание полезной нагрузки.

Используйте data:URI с HTML-документом, который загружает оригинальную страницу Разобрать документ XML из местоположения идентифицированной ссылки URI [IETF RFC 2396] с помощью XHR

parseURI

. Если URI содержит идентификатор фрагмента (см. Раздел 4.1 в [IETF RFC 2396]), поведение не определяется этой спецификацией, будущие версии этой спецификации могут определять поведение.

function loadDataForVersion(core_version) 
    { 
    var features_doc = document.implementation.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, "").parseURI("features."+core_version+".xml"); 
    var feature_nodes = features_doc.evaluate("//feature", features_doc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); 
    var feature_node; 
    while (feature_node = feature_nodes.iterateNext()) 
     { 
     addFeatureNode(features_doc, feature_node, core_version); 
     } 
    } 

Асинхронный LSParser объекты, как ожидается, также реализуют интерфейс событий :: EventTarget так, что слушатели событий могут быть зарегистрированы на асинхронных LSParser объектов.

События поддерживаются асинхронными LSParser объектами являются:

нагрузка

В LSParser завершении загрузки документа. См. Также определение интерфейса LSLoadEvent.

прогресс

Прогресс LSParser сигналов в качестве данных обрабатываются.

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

Запрос вызывается с помощью (обратный вызов, URL) функциями CSSHttpRequest.get:

CSSHttpRequest.get(
     "http://www.nb.io/hacks/csshttprequest/hello-world/", 
     function(response) { alert(response); } 
    ); 

данные кодируются на сервере в кодированные URI 2KB куски и сериализованные в CSS @import с модифицированной схемой about:URI. Ответ декодируется и возвращается к функции обратного вызова в виде строки

Ссылки

+0

ничего себе. раздутый ум – aWebDeveloper