我想在Chrome浏览器(Chrome 56.0.2924.87,Ubuntu 14.04)中使用javascript中的window.open(fileObjectURL)
在新标签中打开PDF。我正在从base64编码的数据创建blob,并创建一个像这样的objectURL:
const fileObjectURL = URL.createObjectURL(fileBlob);
它在最新的Firefox浏览器中工作正常。但在Chrome中,我可以看到新的标签页被打开,然后立即关闭。所以我在控制台等中没有得到任何错误。现在在Chrome中工作的唯一方法是将base64数据直接提供给window.open(fileBase64Data)
函数。但我不喜欢在url中设置完整的数据。
也许这是Chrome阻止打开Blob的安全问题?
8条答案
按热度按时间pcrecxhr1#
原因可能是adblock扩展(我有完全相同的问题)。
bxpogfeg2#
你必须打开新窗口,然后才能将blob url放入窗口:
let newWindow = window.open('/')
你也可以使用一些其他的页面,如
/loading
,加载指示器。然后你需要等待newWindow加载,你可以在这个窗口中推送你的blob文件的url:
Adblock扩展不会阻止它。
我使用它与 AJAX 和ES生成器像这样:
kiayqfof3#
工作方式绕过广告拦截器。
coffeescript & jquery
k4emjkb14#
萨拉姆
Blob不会被chrome阻止,但会被AdBlock扩展阻止:
ldxq2e6h5#
在普通的vanilly javascript中(因为我没有jquery)
/file.html
是一个几乎为空的html文件,源码:在chrome和firefox中测试(2019年11月20日)
wb1gzix06#
不幸的是,上述解决方案都不起作用。新窗口在生产中仍然会被阻止,在开发中它可以工作。只有Chrome阻止,在Edge中一切正常。
gev0vcfq7#
我没有广告拦截器。看起来将blob类型显式设置为application/pdf将解决这个问题。
const newBlob = new Blob([blobData], {type: "application/pdf"});
pb3skfrl8#
完成了,我只是添加了**{type:“application/pdf”}**,或者您只是添加任何内容类型。