UiWebView response to window.print

僤鯓⒐⒋嵵緔 提交于 2019-12-06 06:14:19

问题


Is there a way to detect window.print from a UIWebView and respond to it? I have printing in my UiWebView and need to have a way to react to that event from the UIWebView.


回答1:


First, this is the solution I came across. But UIWebview does not support those events and the API like in a desktop browser. And haven't yet got the matchMedia to work. Probably will work when I have a printer configured!?!.

The actual reason is that the media type of the web page did not change from screen to print in the UIWebView, unlike desktop browsers, so there is no trigger, till this point.

And UIWebView has no delegate method for printing exposed till date.

Anyways, where there is a will, there is a [hack] way. Two step solution.

Step 1. Javascript

If you have access to the HTML or JS file, and it is used only for this UIWebView, you can add the below lines to the 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";
    }
})();

If you don't have access to the HTML or JS file, in your UIWebView delegate, add the below code

[self.myWebView stringByEvaluatingJavaScriptFromString:@"(function(){var originalPrintFn = window.print;window.print = function(){window.location = 'your_app_scheme:print';}})();"];

This can be done in the delegate's webViewDidFinishLoad method

Step 2. Catching the call in native

- (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;
}

After this in your_handle_to_print, you can do your printing magic.

Hope this helps!



来源:https://stackoverflow.com/questions/22364543/uiwebview-response-to-window-print

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!