是否有一种普遍接受的技术可以有效地将JavaScript字符串转换为ArrayBuffers,反之亦然?具体来说,我希望能够将ArrayBuffer的内容写入localStorage并将其读回.
我正在尝试使用XMLHttpRequest(使用最近的Webkit)下载二进制文件,并使用这个简单的函数对其内容进行base64编码:
function getBinary(file){
var xhr = new XMLHttpRequest();
xhr.open("GET", file, false);
xhr.overrideMimeType("text/plain; charset=x-user-defined");
xhr.send(null);
return xhr.responseText;
}
function base64encode(binary) {
return btoa(unescape(encodeURIComponent(binary)));
}
var binary = getBinary('http://some.tld/sample.pdf');
var base64encoded = base64encode(binary);
Run Code Online (Sandbox Code Playgroud)
作为旁注,上面的所有内容都是标准的Javascript内容,包括btoa()和encodeURIComponent():https://developer.mozilla.org/en/DOM/window.btoa
这非常顺利,我甚至可以使用Javascript解码base64内容:
function base64decode(base64) {
return decodeURIComponent(escape(atob(base64)));
}
var decodedBinary = base64decode(base64encoded);
decodedBinary === binary // true
Run Code Online (Sandbox Code Playgroud)
现在,我想使用Python解码base64编码的内容,它使用一些JSON字符串来获取base64encoded字符串值.天真这就是我的所作所为:
import urllib
import base64
# ... retrieving of base64 encoded string through JSON
base64 = "77+9UE5HDQ……………oaCgA="
source_contents = urllib.unquote(base64.b64decode(base64))
destination_file …Run Code Online (Sandbox Code Playgroud) 有些网站有很多图像,所以延迟加载似乎适合减少加载时间和数据消耗.但是如果你还需要支持该网站的打印呢?
我的意思是,您可以尝试检测打印事件,然后加载图像,如下所示:
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
Run Code Online (Sandbox Code Playgroud)
注意:这是一个一个像素的gif虚拟图像.
window.addEventListener('DOMContentLoaded', () => {
img = document.querySelector('img');
var isPrinting = window.matchMedia('print');
isPrinting.addListener((media) => {
if (media.matches) {
img.src = 'http://unsplash.it/500/300/?image=705';
}
})
});
Run Code Online (Sandbox Code Playgroud)
注意:如果您在代码游乐场中尝试此操作,请删除该DOMContentLoaded事件(或简单地分叉这些:JSFiddle | Codepen).
注:我没有事件与麻烦onbeforeprint,并onafterprint为明显的原因.
如果图像被缓存,这将工作正常,但再次,这恰恰不是重点.图像应全部加载,然后出现在打印屏幕中.
你有什么想法?有没有人成功实现了打印就绪的延迟加载插件?
我已经尝试在检测到打印对话框后将用户重定向到网站的标记版本,即website.com?print=true停用延迟加载并且所有图像正常加载.
通过window.print()在该标记的打印就绪版本的页面中应用该方法,在所有图像加载完成后打开新的打印对话框,并在页面顶部同时显示"等待"消息来改进该方法.
重要提示:此方法已在Chrome中进行过测试,但在Firefox和Edge中无效(因此,这不是一个答案,而是一个证词).
它适用于Chrome,因为当您重定向到另一个网站时,打印对话框会关闭(在这种情况下,相同的网址会被标记).在Edge和Firefox中,打印对话框是一个实际的窗口,它不会关闭它,使其无法使用.
javascript ×3
arraybuffer ×1
base64 ×1
encoding ×1
html ×1
image ×1
lazy-loading ×1
printing ×1
python ×1
typed-arrays ×1