相关疑难解决方法(0)

在字符串和ArrayBuffers之间转换

是否有一种普遍接受的技术可以有效地将JavaScript字符串转换为ArrayBuffers,反之亦然?具体来说,我希望能够将ArrayBuffer的内容写入localStorage并将其读回.

javascript serialization typed-arrays arraybuffer

231
推荐指数
16
解决办法
30万
查看次数

使用Javascript检索二进制文件内容,base64对其进行编码并使用Python对其进行反向解码

我正在尝试使用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)

javascript python base64 encoding xmlhttprequest

37
推荐指数
1
解决办法
6万
查看次数

如何延迟加载图像并使其可用于打印

有些网站有很多图像,所以延迟加载似乎适合减少加载时间和数据消耗.但是如果你还需要支持该网站的打印呢?

我的意思是,您可以尝试检测打印事件,然后加载图像,如下所示:

HTML

<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
Run Code Online (Sandbox Code Playgroud)

注意:这是一个一个像素的gif虚拟图像.

JavaScript的

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中,打印对话框是一个实际的窗口,它不会关闭它,使其无法使用.

html javascript printing lazy-loading image

24
推荐指数
1
解决办法
3573
查看次数