有没有办法从UIWebView中检测window.print并对其做出响应?我在我的UiWebView中打印,需要有办法从UIWebView对该事件作出反应。
答案 0 :(得分:9)
首先,这是我遇到的solution。但是UIWebview不像桌面浏览器那样支持这些事件和API。并且尚未让matchMedia
工作。当我配置打印机时可能会工作!?!。
实际原因是,与桌面浏览器不同,网页的媒体类型在UIWebView中没有从screen
更改为print
,因此在此之前没有触发器。
UIWebView没有委托方法来打印直到日期。
无论如何,只要有遗嘱,就会有[hack]方式。两步解决方案。
步骤1. Javascript
如果您可以访问HTML或JS文件,并且它仅用于此UIWebView,则可以将以下行添加到JS
(function(){
var originalPrintFn = window.print; // Keep it cached in this variable, just in case
window.print = function(){
// Trigger location change
window.location = "your_app_scheme:print";
}
})();
如果您无法访问HTML或JS文件,请在UIWebView委托中添加以下代码
[self.myWebView stringByEvaluatingJavaScriptFromString:@"(function(){var originalPrintFn = window.print;window.print = function(){window.location = 'your_app_scheme:print';}})();"];
这可以在代理人的webViewDidFinishLoad
方法
步骤2.以原生
抓取电话- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([[[request URL] absoluteString] hasPrefix:@"your_app_scheme:"]) {
// Call the given selector
[self performSelector:@selector(your_handle_to_print)];
// Cancel the event, so the webview doesn't load the url
return NO;
}
return YES;
}
在your_handle_to_print
之后,您可以进行打印魔术。
希望这有帮助!