【问题标题】:Workaround for lack of cross domain AJAX support in Opera MiniOpera Mini 中缺少跨域 AJAX 支持的解决方法
【发布时间】:2016-01-06 23:58:31
【问题描述】:

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

【问题讨论】:

  • 你试过jsonp吗?尽管您只需要满足于GET 方法。

标签: angularjs ajax cors shim opera-mini


【解决方案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 与通过 XHR 加载原始页面的 HTML 文档一起使用

解析URI

从 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 表示数据解析的进度。

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

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

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

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

参考文献

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多