Opera Mini缺乏跨域AJAX支持的解决方法

时间:2015-10-09 06:35:08

标签: angularjs ajax cors shim opera-mini

根据caniuse.comopera.com,Opera Mini不支持CORS。有解决方法吗?我可以从/向不同的域或至少到AngularJS中的子域发出AJAX请求吗?

1 个答案:

答案 0 :(得分: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不在同一个域中。一旦parseURIdata:URI结合执行,可能性就会无穷无尽 - 并且很难确定有效载荷的来源和内容。

     

data:URI与通过XHR加载原始页面的HTML文档一起使用

     

parseURI

     

从URI引用[IETF RFC 2396]标识的位置解析XML文档。如果URI包含片段标识符(请参阅[IETF RFC 2396]中的第4.1节),则此规范未定义该行为,此规范的未来版本可能会定义该行为。

  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对象还应实现events :: EventTarget接口,以便可以在异步LSParser对象上注册事件侦听器。

     

异步LSParser对象支持的事件是:

     

负载

     

LSParser完成加载文档。另请参见LSLoadEvent接口的定义。

     

进步

     

LSParser信号在解析数据时进展。

     

此规范不会尝试准确定义何时应调度进度事件。故意将其视为依赖于实现的。下面是应用程序如何分派进度事件的一个示例:解析器开始接收数据后,将调度progress事件以指示解析开始。从那里开始,为每个接收和处理的4096字节数据调度progress事件。这只是一个例子,实现可以选择在解析时随时调度进度事件,或者根本不调度它们。

  

使用CSSHttpRequest.get(url,callback)函数调用请求:

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

数据在服务器上编码为URI编码的2KB块,并使用修改后的about:URI方案序列化为CSS @import规则。响应被解码并作为字符串

返回到回调函数

<强>参考