如何在 iOS 10 上覆盖 WKWebView 的 "Save Image" 菜单

How to override the "Save Image" menu of WKWebView on iOS 10

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

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

有实现的方法吗?

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

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

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

只需删除所有 "long press" 手势识别器或调试它并了解您需要删除哪些识别器:

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

可以注入js逻辑来防止默认动作,并将事件传递给native。

可以看到详细说明here

并且可以找到示例代码here