Jquery 如何让base64 pdf字符串在IE中工作(base64 pdf字符串来自odata调用)
我正在使用Knockout Kendo数据绑定从后端获取base64 pdf字符串,我正在尝试在对象标记中显示base64字符串,并在所有浏览器中显示嵌入标记,但它在IE中不起作用。有人能帮我在IE中显示base64 pdf url字符串吗。语法:Jquery 如何让base64 pdf字符串在IE中工作(base64 pdf字符串来自odata调用),jquery,knockout.js,kendo-ui,odata,Jquery,Knockout.js,Kendo Ui,Odata,我正在使用Knockout Kendo数据绑定从后端获取base64 pdf字符串,我正在尝试在对象标记中显示base64字符串,并在所有浏览器中显示嵌入标记,但它在IE中不起作用。有人能帮我在IE中显示base64 pdf url字符串吗。语法: this.pdfData = ko.computed(function () { var pData = this.pData(); if (pdata) { // g
this.pdfData = ko.computed(function () {
var pData = this.pData();
if (pdata) {
// get pdf data here
var bob = 'data:application/pdf;base64,' + service.standard.call.payslipPdf.get(payslip).Ev_pdf;
return bob;
//debugger;
}
return '';
}, this);
答复来自:
根据,您不能在IE中使用数据uri进行导航
- Internet Explorer版本7(截至2011年9月,约占web流量的5%)缺乏支持。但是,这可以通过提供特定于浏览器的内容来克服。[]
- Internet Explorer 8将数据URI的最大长度限制为32 KB。(Internet Explorer 9没有此限制)[]
- 在IE8和IE9中,数据URI只能用于图像,不能用于导航或Javascript生成的文件下载。[]
一种可能,也不完全是干净的解决方案,是在服务器上构建一些东西,它接受base-64的请求并将其转换为映像响应 如果它足够小,您可以在一个大调用中完成所有操作,只需构建一个
img
标记,如:
<img src="MyHandler.ashx?img=784571348589235824...9875290347589243">
编辑刚刚注意到问题是关于PDF的,而不是图像,但同样的想法应该可行。有趣的功能。你能详细说明一下它在IE中如何/为什么不起作用吗?如果您可以稍微扩展示例代码,甚至可以使用testdata,这也会有所帮助,这样我们就可以重新处理这个问题。(另外,你可以编辑你的问题来更新它。)那么如何在IE9中显示pdf base64 url字符串呢?我可以在除IE之外的所有浏览器中查看和下载pdf。调试时,我会看到一个灰色屏幕,带有pdf字符串数据,但它不会显示在IE中。知道吗?这是不可能的。您必须链接到一个文件引用。“这就是我如何进行数据绑定”让我说得更清楚。在IE9中不可能做到这一点。世界上所有的javascript都不会改变这个事实。停下来,使用另一种方法。为了在我的前端显示PDF,我应该使用哪种方法?odata callHi Joe,我使用的是MVVC,谢谢你的建议,但我的要求严格是击倒剑道和odata service call。我需要绑定case对象中的控件以在IE中工作。数据:application/pdf;base64,“+service.standard.call.paytlopsdf.get(payslip.Ev_pdf;这个调用让我获得pdf base64字符串数据joeThen如果旧的IE浏览器不能使用普通技术完成您正在尝试的任务,那么您可能只是运气不佳。这个解决方案是一个巨大的黑客攻击,使用了大量的带宽和资源,但它可以跨浏览器使用,即使是较旧的浏览器。当你瞄准旧的浏览器时,你必须考虑其中一件事——很多新的很酷的东西都离不开变通办法,所以你的选择通常是要么需要新的浏览器,要么做难看的变通办法。嗨,乔,谢谢你的回复,还有你上面给我的例子,我可以用它作为PDF的参考吗?我需要数据绑定我的object标记和embed标记来显示PDF结果。啊,你应该能够使用其中的大部分-唯一真正的区别是当你从AJAX调用中得到URL时,你对它的处理方式,以及从服务器发送字节时的MIME类型。我没有处理PDF呈现,但我假设您只需将URL绑定到
src
或href
或类似的内容。
[HttpPost]
public ActionResult GetImageKey(string base64) {
var key = Guid.NewGuid();
HttpContext.Cache.Add(key.ToString(), Convert.FromBase64String(base64), null,
DateTime.Now.AddSeconds(30), Cache.NoSlidingExpiration, CacheItemPriority.Normal,
null);
return Json(new { imageKey = key.ToString() });
}
public ActionResult GetImage(string imageKey) {
return File((byte[])HttpContext.Cache[imageKey], "image/png");
}
function go() {
jQuery.ajax({
url: "/Home/GetImageKey",
type: "post",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{'base64':'iVBORw...FNmlZSxpODv+wRj1j56bJnOiwAAAABJRU5ErkJggg=='}",
success: function (result) {
jQuery("#img-result").attr("src", "/Home/GetImage?imageKey=" + result.imageKey);
}
});
}