2016-04-18 87 views
1

我使用printThis.js发现hereprintThis.js css文件不加载

它调用外部CSS文件,这是我做的能力。 我遇到的问题是CSS第一次调用该函数时从不加载,并且打印输出缺少其样式。第二次它通常会工作,这让我觉得CSS文件需要预先加载。

我已经尝试使用加载CSS的临时页面的隐藏的iframe,但这不起作用。我可以在当前页面上动态加载它,但是像body这样的元素的重叠设置会被搞乱。

这里是jQuery代码:

$("#printDiv").printThis({ 
    debug: false,    
    importCSS: false,   
    importStyle: false,   
    printContainer: true,  
    loadCSS: "css/specialCSS.css", 
    pageTitle: "the page title",  
    removeInline: false,  
    printDelay: 0,   
    header: null,    
    formValues: false   
});     

$("#print").html("Print"); 

有没有办法迫使塞在预加载CSS?

+0

你是如何包含printThis.js文件的?是一个本地副本或CDN ... loadCSS实际上是从您所在页面的目录工作的,还是以/css/specialCSS.css为前缀?请提供更多详细信息 – bretterer

+0

我有一个本地js文件副本我包含在HTML页面标题中。 我很确定相对路径都是正确的,因为打印将在第二次打印时生效。我会认为如果路径错了,它永远不会工作。 – Shawn

+0

你能解决这个问题吗? – Razvi

回答

1

我刚碰到这个问题。这里是我使用的代码:

$('selector').printThis({ 
      loadCSS: "/app/css/printListTable.css", 
      header:'<h1>'+$pageTitle+' Table Report</h1>' 
     }); 

当我第一次点击按钮,样式表没有加载,所以我的打印CSS没有加载。当我再次点击动作按钮时,风格显示如预期。我错过了importCSS:true的一个关键语法,我假设为我预载了这个文件。所以我更新的代码将是:

$('selector').printThis({ 
       importCSS: true, 
       importStyle: true,//thrown in for extra measure 
       loadCSS: "/app/css/printListTable.css", 
       header:'<h1>'+$pageTitle+' Table Report</h1>' 
      }); 

试图通过iframe预加载这个CSS将是一场噩梦并且违背这个插件的基础。

+0

我无法使用此解决方案解决我的问题。我仍然收到同样的错误。任何投入? – Razvi

1

您可以尝试简单地将load CSS调用移动到另一个在页面中调用较高的函数(请记住:浏览器从上至下读取页面,它看起来完全一样直观)。您也可以在页面顶部的隐形<span>加载呼叫。

只是为了完整性,yes, you can preload CSS without using a hidden iFrame

+0

用户缺少关键语法来解决此问题。看到我的答案。我的答案应该是更新的批准答案。 – HollerTrain