Есть ли способ изменить путь к большому двоичному объекту из URL.createObjectURL

Я использую модуль GMS1.4 HTML5, и в настоящее время я пытаюсь импортировать в него изображения спрайтов. Проблема в том, что я не хочу сохранять его в локальном каталоге, и, поскольку есть встроенная функция, которая позволяет добавлять спрайт из URL-адреса, я думал просто использовать большой двоичный объект, чтобы выполнить работу, поэтому временный спрайт стирается из памяти после того, как пользователь закончит игру.

Проблема в том, что версия 1.4 находится в песочнице, поэтому все URL-ссылки и ссылки, похоже, указывают на локальное хранилище. вместо

blob:http://mysite.co/85cad96e-e44e-a1f9-db97a96ed3fe

это будет подготовлено так

http://mysite.co/html5game/blob:http://mysite/85cad96e-e44e-a1f9-db97a96ed3fe

Я только предполагаю, что это связано с песочницей GMS, и, похоже, нет способа отключить ее. моя следующая идея состоит в том, что, поскольку он хочет упрямо использовать каталог песочницы, было просто создать большой двоичный объект в этой папке. Можно ли создать по пути и URL.createObjectURL?


person DaRagingDemon    schedule 19.02.2020    source источник
comment
Нет, вы не можете, вам лучше просто задать исходный вопрос: как чтобы гейммейкер не предварительно обрабатывал ваши ссылки.   -  person Kaiido    schedule 19.02.2020


Ответы (1)


Вы можете адаптировать подход на основе того, что я сделал для "Allow Data URI". чтобы также разрешить URI больших двоичных объектов. Выдержка следует,

ГМЛ:

#define gmcallback_AllowDataURI
if (AllowDataURI()) {
    AllowDataURI(sprite_add("", 1, 0, 0, 0, 0));
}

JS:

function AllowDataURI() {
    var p0 = "\\s*\\(\\s*";
    var p1 = "\\s*\\)\\s*";
    var eq = "\\s*=\\s*";
    var id = "\\w+";
    //
    var init_js = window.gml_Script_gmcallback_AllowDataURI.toString();
    var sprite_add_js = window[
        /\bAllowDataURI\s*\(\s*(\w+)/.exec(init_js)[1] // AllowDataURI(sprite_add(...
    ].toString();
    var sprite_add_url = /function\s*\w*\s*\((\w+)/g.exec(sprite_add_js)[1];
    var sprite_add_url2 = new RegExp(
        "("+id+")"+eq+sprite_add_url+"\\b", // `sprite_add_url2 = sprite_add_url`
    "g").exec(sprite_add_js);
    sprite_add_url2 = sprite_add_url2 ? sprite_add_url2[1] : sprite_add_url;
    //
    var image_add_js = window[new RegExp(
        id+eq+"("+id+")"+p0+sprite_add_url2+p1, // `_ = image_add(sprite_add_url2)`
    "g").exec(sprite_add_js)[1]].toString();
    var image_add_url = /function\s*\w*\s*\((\w+)/g.exec(image_add_js)[1];
    //
    var url_proc = new RegExp(
        id+eq+"("+id+")"+p0+image_add_url+p1, // `_ = url_proc(image_add_url)`
    "g").exec(image_add_js)[1];
    window[url_proc] = (function() {
        var f = window[url_proc];
        return function(url) {
            if (url.substring(0, 5) == "data:") return url;
            if (url.substring(0, 5) == "blob:") return url; // new!
            return f.apply(this, arguments);
        };
    })();
    //
    return false;
}
person YellowAfterlife    schedule 23.02.2020