uni-app x webview 如何实现 plus.webview 里的 overrideUrlLoading 拦截请求URL,以及ios uts 如何实现 delegate
uni-app x webview 如何实现 plus.webview 里的 overrideUrlLoading 拦截请求URL,以及ios uts 如何实现 delegate
如何 实现 wkwebview 的
optional func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse,
decisionHandler: @escaping @MainActor @Sendable (WKNavigationResponsePolicy) -> Void)
协议方法
这个闭包是没有参数的
export type VoidCallback = (WKNavigationActionPolicy : WKNavigationActionPolicy) => void
webView(webView : WKWebView, @argumentLabel("decidePolicyFor") navigationAction : WKNavigationAction, @escaping decisionHandler : VoidCallback) {
console.log('decidePolicyFor')
decisionHandler(WKNavigationActionPolicy.cancel)
}
或者 uni-app x webview 如何实现 plus.webview 里的 overrideUrlLoading 拦截请求 URL
3 回复
1、要想上面的代理方法生效,首先需要是你自定义的webview组件,uni-app x 内置的weview组件不对外提供拦截url的能力;
2、上面的代理方法写法有误,需要直接翻译,不用定义中间变量VoidCallback
谢谢,怪不得,有些代理,没有回调
在uni-app中使用plus.webview
的overrideUrlLoading
拦截请求URL,可以通过监听webview
对象的loadurl
事件来实现。下面是一个示例代码,展示了如何拦截并处理URL请求。
uni-app中的plus.webview overrideUrlLoading实现
- 创建Webview
const webview = plus.webview.create('https://example.com', '_blank', {
top: '0px',
bottom: '0px'
});
- 监听loadurl事件
webview.addEventListener('loadurl', function(e) {
// e.url 是加载的URL
console.log('Loading URL:', e.url);
// 在这里进行URL拦截处理
if (e.url.startsWith('https://example.com/intercept')) {
// 拦截特定URL
plus.nativeUI.toast('URL has been intercepted!');
// 可以选择加载另一个URL或执行其他操作
// webview.executeScript({ code: 'window.location.href = "https://newurl.com"' });
// 或者直接关闭webview
// webview.close();
// 返回false以阻止默认的URL加载行为
return false;
}
// 返回true以允许默认的URL加载行为
return true;
});
- 显示Webview
webview.show();
iOS UTS中的delegate实现
在iOS开发中,要实现URL请求的拦截,通常通过实现UIWebViewDelegate
或WKNavigationDelegate
(对于WKWebView
)的代理方法来完成。
UIWebViewDelegate 示例
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UIWebViewDelegate>
@property (nonatomic, strong) UIWebView *webView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
self.webView.delegate = self;
[self.view addSubview:self.webView];
NSURL *url = [NSURL URLWithString:@"https://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *URL = request.URL;
NSLog(@"Loading URL: %@", URL.absoluteString);
if ([URL.absoluteString hasPrefix:@"https://example.com/intercept"]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Info" message:@"URL has been intercepted!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
// 拦截后重定向或其他操作
// [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://newurl.com"]]];
return NO; // 阻止加载
}
return YES; // 允许加载
}
@end
上述代码展示了如何在uni-app和iOS UTS中拦截URL请求。根据实际需求,你可以在这些拦截点执行不同的操作,如重定向、显示警告或执行其他自定义逻辑。