diff --git a/Assets/Plugins/iOS/H5View.m b/Assets/Plugins/iOS/H5View.m index a13c448..96745d1 100644 --- a/Assets/Plugins/iOS/H5View.m +++ b/Assets/Plugins/iOS/H5View.m @@ -1,10 +1,3 @@ -// -// H5View.m -// TestGameWeb -// -// Created by Mac on 2024/1/30. -// - #import "H5View.h" #import "CircularProgressBar.h" #import @@ -622,7 +615,51 @@ UnitySendMessage("SdkManager", "H5AutoRefresh",[[url stringByAppendingString:@"|h6"] UTF8String]); } -//隐藏webview + +- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { + + NSURL *url = navigationAction.request.URL; + NSString *scheme = [url.scheme lowercaseString]; + + // ========================================== + // 【第一步】:防流氓跳转(App Store / 其他 App 唤起拦截) + // ========================================== + + // 1. 过滤 App Store 的专用协议 (itms-apps, itms-services 等) + if ([scheme hasPrefix:@"itms"]) { + decisionHandler(WKNavigationActionPolicyCancel); + return; + } + + // 2. 过滤直连 App Store 的标准 https 链接 (apps.apple.com / itunes.apple.com) + if ([scheme isEqualToString:@"http"] || [scheme isEqualToString:@"https"]) { + if ([url.host containsString:@"apps.apple.com"] || [url.host containsString:@"itunes.apple.com"]) { + decisionHandler(WKNavigationActionPolicyCancel); + return; + } + } +// else { +// // 3. 拦截其他所有非 http/https 的自定义 Scheme (例如 weixin://, tbopen:// 等流氓广告唤起链接) +// // 除非网页中需要支持特定功能(如微信支付),否则一律拦截以防止乱跳 +// decisionHandler(WKNavigationActionPolicyCancel); +// return; +// } + + // ========================================== + // 【第二步】:处理 target="_blank" (新标签页/新窗口打开链接的问题) + // ========================================== + + // 如果是用户点击链接,且该链接不是在当前主窗口打开 + if (navigationAction.navigationType == WKNavigationTypeLinkActivated && !navigationAction.targetFrame.isMainFrame) { + // 拒绝默认的新窗口跳转 + decisionHandler(WKNavigationActionPolicyCancel); + // 强行在当前窗口中重新加载该链接 + [webView loadRequest:navigationAction.request]; + } else { + // 其余情况(正常的主页面跳转、JS 自动加载等),一律放行 + decisionHandler(WKNavigationActionPolicyAllow); + } +} //设置飞行进度条进度 -(void)setIconProgress:(float)value{ @@ -1117,6 +1154,12 @@ } +-(BOOL)GetThrough{ + + return dark_though; + +} @end + diff --git a/Assets/Plugins/iOS/UIApplication+UnityTouchHook.mm b/Assets/Plugins/iOS/UIApplication+UnityTouchHook.mm index 0a58eee..ba979d7 100644 --- a/Assets/Plugins/iOS/UIApplication+UnityTouchHook.mm +++ b/Assets/Plugins/iOS/UIApplication+UnityTouchHook.mm @@ -1,7 +1,7 @@ #import #import #import - +#include "H5View.h" extern UIView *UnityGetGLView(void); @interface UIApplication (UnityTouchHook) @@ -43,9 +43,13 @@ static Ivar g_ivarPrevLocation = NULL; - (void)ut_sendEvent:(UIEvent *)event { + + // 1. 让系统和 WebView 先走正常响应 [self ut_sendEvent:event]; - + if (![[H5View shared] GetThrough]) { + return; + } if (event.type != UIEventTypeTouches) return;