UiWebView对window.print的响应

时间:2014-03-12 21:45:38

标签: uiwebview uiwebviewdelegate

有没有办法从UIWebView中检测window.print并对其做出响应?我在我的UiWebView中打印,需要有办法从UIWebView对该事件作出反应。

1 个答案:

答案 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之后,您可以进行打印魔术。

希望这有帮助!