我目前正在为iPhone创建一个google-cast应用。它的工作就像我想要的一样,我可以在GoogleCast上播放视频。我唯一的问题是,如果访问的网站用户有弹出式广告,则网页视图会自动重定向到该广告网站(有时会立即重定向多次)。
由于UIWebView没有adBlock功能,我想也许我应该实现多个标签功能,以便可以在新标签页中打开广告,用户可以手动关闭广告标签。
提前致谢。
你们有没有这方面的经验?
答案 0 :(得分:2)
你们首先需要使用WKWebView而不是UIWebView,现在关于选项卡,实际上并没有一个已经制作好的组件可以为你处理这个问题,但你可以做的是拦截来自webview的请求' s委托(用于WKWebView的WKNavigationDelegate和用于UIWebView的UIWebViewDelegate),当您感觉需要在单独的Web视图中打开请求时,您将在当前webview中阻止该请求,并创建一个新的视图,其中嵌入了一个新的webview并关闭按钮以及您感觉到的其他任何标签'需要拥有并执行该请求(在原始webview中阻止的请求)
答案 1 :(得分:1)
在decidePolicyForNavigationAction
委托方法中,您可以声明一个新的WKWebView
类,并根据WKWebView
或navigationType
将其作为子视图添加到上一个request
类。例如,请参阅下面的代码片段,了解我的工作情况,以及哪些工作正常。
- (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);
}
答案 2 :(得分:0)
这是一个支持多标签的开源ios浏览器