javascript window.print()访问被拒绝

时间:2012-09-18 13:46:09

标签: javascript image cross-domain

我正在通过$ .ajax跨域调用从img html元素中的其他域加载图像,并打开带有图像内容的弹出窗口,如下面的代码所示

     var printWindow= "";                                                                 
      methodName = "CreateVisitor";
            $.support.cors = true;
            $.ajax({
                type: "get",
                url: visitorServiceUrl + methodName + "/" + tenantId + "/" + userId
                    + "/" + visitorid + "/" + visitorname + "/" + visitormobilenumber
                    + "/" + visitorcompanyid + "/" + visitorcompanyname + "/" + visiteeid,
                dataType: "jsonp",
                async: false,
                cache: false,
                crossDomain: true,
                success: function (data) {
                    var imageUrl = "";
                    imageUrl = data ? siteImageUrl + data : 'image/NO_IMAGE.jpg';
                    $("#visitorcard").attr('src', imageUrl);
                    printWindow = window.open($("#visitorcard").attr('src'), "_blank", 'width=200,height=200');
                    //                        printWindow.onload = function () {
                    //                            printWindow.print();
                    //                        };
                    setTimeout(function () { printvisitorcard(); }, 1000);

                },
                error: function (xhr, type, exception) {
                    //alert("Error: " + xhr + " : " + exception + " : " + type);
                }
            });

然后我使用setTimeout()尝试自动将图像打印到我的网络打印机(我不确定我是否在同一个域中)这样

function printvisitorcard() {
printWindow.print();
printWindow.close();

}

但是,每次我在printWindow.print()上遇到 Microsoft JScript运行时错误:访问被拒绝。;线。我知道javascript的跨域问题,但我仍然想要打印图像。我该如何克服这个错误?任何帮助将不胜感激。

P.S Firefox和Chrome不会抛出此错误,但它们也不会打印图像。

1 个答案:

答案 0 :(得分:1)

从您自己的域名更改为某些内容。

以下是DEMO - 适用于Fx - 要在Chrome中运行,您需要添加点击处理程序。弹出窗口被阻止,除非用户单击以获取它

success: function (data) {
  var imageUrl = data ? siteImageUrl + data : 'image/NO_IMAGE.jpg';
  $("#visitorcard").attr('src', imageUrl);
  var printWindow = window.open("", "_blank", 'width=200,height=200');
  printWindow.document.write('<body onload="window.focus();window.print()">'+
    $("#visitorcard").parent().html()+'</body>');
  printWindow.document.close();
},