Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何让base64 pdf字符串在IE中工作(base64 pdf字符串来自odata调用)_Jquery_Knockout.js_Kendo Ui_Odata - Fatal编程技术网

Jquery 如何让base64 pdf字符串在IE中工作(base64 pdf字符串来自odata调用)

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

我正在使用Knockout Kendo数据绑定从后端获取base64 pdf字符串,我正在尝试在对象标记中显示base64字符串,并在所有浏览器中显示嵌入标记,但它在IE中不起作用。有人能帮我在IE中显示base64 pdf url字符串吗。语法:

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);
        }
    });
}