Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.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
在iOS webview中AirPrint后打印样式替代屏幕样式_Ios_Css_Webview_Airprint - Fatal编程技术网

在iOS webview中AirPrint后打印样式替代屏幕样式

在iOS webview中AirPrint后打印样式替代屏幕样式,ios,css,webview,airprint,Ios,Css,Webview,Airprint,我正在开发一款混合HTML5/iOS应用程序,它使用SafariWebView。我们使用AirPrint允许用户打印webview的内容。我遇到的问题是,在打印对话框打开后,打印样式会在屏幕上生效,即使在打印完成或取消后也不会消失。这在我们的Windows或Android版本的应用程序中不会发生,它们分别使用CEF和Android系统Webview。这些版本的应用程序中的打印样式仅应用于打印输出,如预期的那样 有没有人有过将AirPrint与Safari Webview结合使用的经验,可以为解决

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

有没有人有过将AirPrint与Safari Webview结合使用的经验,可以为解决方案提供一些帮助?我曾考虑在打印前后添加/删除包含CSS和javascript的链接标记,但这感觉有点不对劲,并没有回答为什么要将打印样式应用到屏幕上这个奇怪的问题


感谢您的帮助!很抱歉,没有真正的方法将代码附加到此文件

是的,这确实是一种出乎意料的行为。但是,我们可以尝试使用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;
详细地说,它抓取所有的
标记,并在后面附加一个随机数,强制在样式表上重新加载


请让我知道这是否有效,我很乐意提供帮助。

您能给我们看一下问题的屏幕截图吗。如果可以,请提供代码的屏幕截图?这听起来绝对是一个可行的解决方案。今天不在办公室,但我会在下周试用,然后再给你回复。谢谢感谢您尝试提供少量信息,但不幸的是,重新加载样式没有帮助,因为问题是无论出于何种原因(很可能是webkit bug),webview甚至在屏幕上触发打印媒体查询,并且正在应用打印样式。重新加载样式不会将状态重置为仅屏幕。除了通过设置window.location重新加载webview之外,似乎找不到任何方法来影响这一点,这是非常笨拙的UX。嗨,Eric,你可以尝试另一件事:如果打印css位于不同的标记上,请尝试删除它,以强制webkit呈现以前的样式表。这听起来很糟糕,但似乎你已经没有选择了