在iOS webview中AirPrint后打印样式替代屏幕样式
我正在开发一款混合HTML5/iOS应用程序,它使用SafariWebView。我们使用AirPrint允许用户打印webview的内容。我遇到的问题是,在打印对话框打开后,打印样式会在屏幕上生效,即使在打印完成或取消后也不会消失。这在我们的Windows或Android版本的应用程序中不会发生,它们分别使用CEF和Android系统Webview。这些版本的应用程序中的打印样式仅应用于打印输出,如预期的那样 有没有人有过将AirPrint与Safari Webview结合使用的经验,可以为解决方案提供一些帮助?我曾考虑在打印前后添加/删除包含CSS和javascript的链接标记,但这感觉有点不对劲,并没有回答为什么要将打印样式应用到屏幕上这个奇怪的问题在iOS webview中AirPrint后打印样式替代屏幕样式,ios,css,webview,airprint,Ios,Css,Webview,Airprint,我正在开发一款混合HTML5/iOS应用程序,它使用SafariWebView。我们使用AirPrint允许用户打印webview的内容。我遇到的问题是,在打印对话框打开后,打印样式会在屏幕上生效,即使在打印完成或取消后也不会消失。这在我们的Windows或Android版本的应用程序中不会发生,它们分别使用CEF和Android系统Webview。这些版本的应用程序中的打印样式仅应用于打印输出,如预期的那样 有没有人有过将AirPrint与Safari Webview结合使用的经验,可以为解决
感谢您的帮助!很抱歉,没有真正的方法将代码附加到此文件 是的,这确实是一种出乎意料的行为。但是,我们可以尝试使用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呈现以前的样式表。这听起来很糟糕,但似乎你已经没有选择了