我目前正在为iPhone创建一个google-cast应用。这一切都如我所愿,我可以在GoogleCast上投放一段视频。我唯一的问题是,如果用户访问的网站有弹出广告,webview会自动重定向到该广告站点(有时会同时重定向多个)。
由于UIWebView没有adBlock功能,我想也许我应该实现多个选项卡功能,这样广告就可以在新的选项卡中打开,用户可以手动关闭广告选项卡。
提前谢谢。
你们有没有这方面的经验?
发布于 2017-07-03 16:35:28
首先,您需要使用WKWebView而不是UIWebView,现在关于选项卡,实际上还没有一个已创建的组件可以为您处理此问题,但您可以做的是截获来自webview的委托(对于WKWebView为WKNavigationDelegate,对于UIWebView为UIWebViewDelegate )的请求,当您觉得一个请求需要在一个单独的webview中打开时,您就在当前webview中阻止该请求,并创建一个新视图,其中嵌套一个新的webview和一个关闭按钮,以及您认为“tab”需要在其中执行该请求(即您在原始webview中阻止的请求)的任何其他内容
发布于 2017-10-17 16:25:42
在decidePolicyForNavigationAction委托方法中,您可以声明一个新的WKWebView类,并将其作为子视图添加到以前基于navigationType或request的WKWebView类中。例如,看看下面的代码片段,我是怎么做的,这对我来说很好。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
if (navigationAction.navigationType == WKNavigationTypeLinkActivated) { // OR if (![navigationAction.request.URL.Path isEqualToString:@"Previous URL Path"]) {
// Add cancel button at top of new tab
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(5, 5, 50, 20);
[btn setTitle:@"Close" forState:UIControlStateNormal];
btn.backgroundColor = [UIColor redColor];
[btn addTarget:self action:@selector(close:) forControlEvents:UIControlEventTouchUpInside];
CGRect nFrm = oldWebVw.frame; // Set frame as per your requirement.
nFrm.origin.y = 100;
nFrm.size.height -=120;
newWebVw = [[WKWebView alloc] initWithFrame:nFrm];
newWebVw.backgroundColor = [UIColor blueColor];
[newWebVw addSubview:btn];
[oldWebVw addSubview:newWebVw];
[newWebVw loadRequest:navigationAction.request];
decisionHandler(WKNavigationActionPolicyCancel); // You must cancel the policy else the new request loades on previous WKWebView class
return;
}
decisionHandler(WKNavigationActionPolicyAllow);
} 发布于 2021-06-20 07:43:15
这是一个开源的ios浏览器,支持多个选项卡
https://stackoverflow.com/questions/44880331
复制相似问题