如何在传出的 THREE.TextureLoader 请求上设置标头?

j6m*_*6m8 5 three.js

我希望我TextureLoader使用标题授权来加载纹理:

let loader = new THREE.TextureLoader();
loader.headers = { . . . };                    // I want this!
let myTex = loader.load('my_authorized_url');
Run Code Online (Sandbox Code Playgroud)

我想将自定义标头传递到通过网络发送的请求中。我看到了这个Loader#setWithCredentials()函数,但我不知道它是如何使用的(或者这是否是我应该使用的)。我应该考虑编写自己的加载程序吗?

编辑在我看来,ImageLoader源代码中没有可以设置标头的地方。

j6m*_*6m8 2

我最终决定编辑原型方法Loader

Object.assign(THREE.XHRLoader.prototype, {
    load: function(a, b, c, d) {
        void 0 !== this.path && (a = this.path + a);
        var e = this
        , f = THREE.Cache.get(a);
        if (void 0 !== f)
        return e.manager.itemStart(a),
        setTimeout(function() {
            b && b(f);
            e.manager.itemEnd(a)
        }, 0),
        f;
        var g = new XMLHttpRequest;
        g.overrideMimeType("text/plain");
        g.open("GET", a, !0);
        //
        // .............. 
        // NOTE THIS LINE:
        //
        g.setRequestHeader('HEADER_KEY', 'HEADER_VALUE');
        g.addEventListener("load", function(c) {
            var f = c.target.response;
            THREE.Cache.add(a, f);
            200 === this.status ? (b && b(f),
            e.manager.itemEnd(a)) : 0 === this.status ? (console.warn("THREE.XHRLoader: HTTP Status 0 received."),
            b && b(f),
            e.manager.itemEnd(a)) : (d && d(c),
            e.manager.itemError(a))
        }, !1);
        void 0 !== c && g.addEventListener("progress", function(a) {
            c(a)
        }, !1);
        g.addEventListener("error", function(b) {
            d && d(b);
            e.manager.itemError(a)
        }, !1);
        void 0 !== this.responseType && (g.responseType = this.responseType);
        void 0 !== this.withCredentials && (g.withCredentials = this.withCredentials);
        g.send(null);
        e.manager.itemStart(a);
        return g
    },
    ...
});
Run Code Online (Sandbox Code Playgroud)