window.URL 与 跨域

跨域

关于跨域问题,简单来说就是通过地址访问资源时,所用的协议不同导致无法访问目标。

网上已经有很多关于跨域的主流解决办法,我这里就说说很少会想到用到的办法。


问题

先看看一个具体的小问题:

我需要将用户上传的本地 FBX 模型文件,利用 THREE.JS 的 放在 Canvas 中展示,而浏览器会给出一个跨域的报错:

three.js:34066 
Access to XMLHttpRequest at 'file:///Users/UserName/Downloads/three.js-
dev/examples/models/fbx/SambaDancing.fbx'  from origin 'null' has been 
blocked by CORS policy:  Cross origin requests are only supported for 
protocol schemes: http, data, chrome, chrome-extension, https.

这个问题一种解决方法是:可以通过将协议统一为 HTTP 来解决,具体不讲。

有时候我们无法转换协议或者更改其它设置的时候,可以利用 window.URL.createObjectURL() 这个方法。


window.URL

console.log(window.URL);

URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。

我们可以监听 input[type="file"]onchange 事件,将文件读出来,然后传入上述方法:

// ...
const file = file[0];
const url = URL.createObjectURL(file);
// ...

这个可以用在很多需要解决跨域的地方。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,933评论 1 45
  • 转载自:https://segmentfault.com/a/1190000007326671bo 前端跨域整理 ...
    天字一等阅读 500评论 0 3
  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    w_zhuan阅读 563评论 0 0
  • 原文地址:原文地址 什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 广义...
    C_Y大渔阅读 1,271评论 1 13
  • 2017年3月18日星期六,一个很平常的日子,与四、五个同事心血来潮的约定了一件事情:就是每天走步(微信运动)达5...
    禅茶养生hao阅读 140评论 0 0