如何在 iOS 10 上覆盖 WKWebView 的“保存图像”菜单

Posted

技术标签:

【中文标题】如何在 iOS 10 上覆盖 WKWebView 的“保存图像”菜单【英文标题】:How to override the "Save Image" menu of WKWebView on iOS 10 【发布时间】:2016-12-27 06:04:04 【问题描述】:

我想使用 WKWebView 开发一个 ios 原生应用。 当我加载页面时,例如:http://www.google.com 当我长按“谷歌”标志时,它会弹出一个带有“保存图像”的 UIAlertViewController “复制” “取消” 项目。

但是当我点击“保存图像”时,照片将被保存到系统“照片库”中 我需要的是“保存图像”到我的应用文档文件夹。

有没有办法实现它?

【问题讨论】:

【参考方案1】:

只需删除所有“长按”手势识别器或对其进行调试并了解您需要删除哪些识别器:

for (UIView *subView in self.webView.scrollView.subviews) 
    for (UIGestureRecognizer *recogniser in subView.gestureRecognizers) 
        if ([recogniser isKindOfClass:UILongPressGestureRecognizer.class]) 
            [subView removeGestureRecognizer:recogniser];
        
    

【讨论】:

【参考方案2】:

你可以注入js逻辑来阻止默认动作,并将事件传递给原生端。

您可以查看详细说明here。

示例代码可以在here找到。

【讨论】:

【参考方案3】:

长按 WKWebview 时出现的菜单是 UIMenuController 。您可以对其进行自定义以向其中添加新项目 - 带有您自定义操作的新按钮。但是您不能修改现有的菜单操作。

如果您想通过菜单将图像复制到其他地方,请添加新菜单以将图像保存到文件夹。

UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Copy Image"
                                                      action:@selector(customAction:)];
[[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObject:menuItem]];

【讨论】:

感谢您的及时回复。我再次编辑了这个问题。更详细地说,我的意思是 UIActionSheet 喜欢的控件,它在第一个屏幕截图中。我猜你提到了 WKWebview 中的第二个菜单,对吗?

以上是关于如何在 iOS 10 上覆盖 WKWebView 的“保存图像”菜单的主要内容,如果未能解决你的问题,请参考以下文章

固定元素在 WKWebkit 上移动

在 iOS 中,当用户滚动浏览 WKWebView 时,如何检测屏幕上可见的 html 元素?

iOS 10.3 WKWebView 访问照片库时崩溃

如何覆盖 wkwebview 超链接操作表

在 iOS 10 上的 WKWebView 中打开 PDF 文件时启用捏合缩放手势

如何在 iOS 应用程序 WkWebView 中调试 javascript?