在iOS webview中的AirPrint之后打印样式覆盖屏幕样式

时间:2016-01-22 15:22:09

标签: ios css webview airprint

我正在开发一个使用Safari Webview的混合HTML5 / iOS应用程序。我们使用AirPrint允许用户打印webview的内容。我遇到的问题是打开打印对话框后,打印样式会在屏幕上生效,即使打印完成或取消后也不会消失。这不会发生在我们的Windows或Android版本的应用程序中,它们分别使用CEF和Android System Webview。这些版本的应用程序中的打印样式仅应用于打印输出,如预期的那样。

任何人都有使用AirPrint与Safari Webview的经验,可以解释一下解决方案吗?我已经考虑过在打印之前和之后添加/删除包含CSS的链接标签,但是感觉很麻烦,并且没有回答为什么打印样式应用于屏幕的奇怪问题。

任何帮助表示赞赏!对不起,没有真正的方法可以附加代码!

1 个答案:

答案 0 :(得分:0)

是的,这确实是一种不期望的行为。但是,我们可以尝试使用JavaScript解决此问题。

理论:打印完成后,让我们重新加载样式表。浏览器将再次绘制页面,并希望使用屏幕定义。

练习:由于我们在打印后没有JavaScript回调,您可以尝试使用window.onfocus事件重新加载样式表,如下所示:

function updateStylesheets(){
  var links = document.getElementsByTagName("link");
  for (var x in links) {
    var link = links[x];
    if (link.getAttribute("type").indexOf("css") > -1) {
      link.href = link.href + "?id=" + new Date().getMilliseconds();
    }
  }
}

window.onfocus = updateStylesheets;

详细说明,它会抓取所有<link>标记并在其后附加一个随机数,从而强制在样式表上重新加载。

如果有效,请告诉我,我很乐意提供帮助。