我在我的应用程序中有一个WKWebView。除了我展示的网站上有社交媒体登录按钮以外,一切都顺利运行。问题是,它们显示(或试图显示)一个弹出窗口,让您允许其访问您的社交媒体帐户。我已经进行了研究并尝试了一些方法,但似乎没有适合的方法。这是我尝试过的内容:
在viewDidLoad中,我尝试在init上启用Javascript:
然而这对我没有帮助。然后我尝试使用委托并走这条路线。我尝试玩createWebViewWithConfiguration方法,但是这似乎有些过度了,因为我必须过滤出它们是否在登录URL,然后配置一个弹出窗口并显示它。然后这仍然不起作用。我还进来处理if not main frame逻辑,取消请求并在主视图中重新加载它,这是一个简单的一行修复,而这个问题正在膨胀成20多行。
这似乎是一个常见的问题,但我似乎找不到很多信息。有什么想法吗?
编辑-添加
在玩Armands答案后,我越来越接近了。这是我的createWebViewWithConfig方法,它只显示一个白色屏幕覆盖层。就好像我需要某些东西告诉新的弹出窗口加载内容。此外-我假设我可以将此模态窗口放置在当前的.m文件中,而不需要完全新的文件?
在viewDidLoad中,我尝试在init上启用Javascript:
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
WKPreferences *thePreferences = [[WKPreferences alloc] init];
thePreferences.javaScriptCanOpenWindowsAutomatically = YES;
thePreferences.javaScriptEnabled = YES;
theConfiguration.preferences = thePreferences;
self.wkWeb = [[WKWebView alloc] initWithFrame:screenRect configuration:theConfiguration];
然而这对我没有帮助。然后我尝试使用委托并走这条路线。我尝试玩createWebViewWithConfiguration方法,但是这似乎有些过度了,因为我必须过滤出它们是否在登录URL,然后配置一个弹出窗口并显示它。然后这仍然不起作用。我还进来处理if not main frame逻辑,取消请求并在主视图中重新加载它,这是一个简单的一行修复,而这个问题正在膨胀成20多行。
这似乎是一个常见的问题,但我似乎找不到很多信息。有什么想法吗?
编辑-添加
在玩Armands答案后,我越来越接近了。这是我的createWebViewWithConfig方法,它只显示一个白色屏幕覆盖层。就好像我需要某些东西告诉新的弹出窗口加载内容。此外-我假设我可以将此模态窗口放置在当前的.m文件中,而不需要完全新的文件?
NSURL *url = navigationAction.request.URL;
if(!navigationAction.targetFrame.isMainFrame && [url.absoluteString rangeOfString:@"initiate_"].location != NSNotFound) {
//open new modal webview
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
config.processPool = [appDelegate getSharedPool];
self.popupLogin = [[WKWebView alloc] initWithFrame:self.wkWeb.bounds configuration:config];
self.popupLogin.frame = CGRectMake(self.wkWeb.frame.origin.x,
self.wkWeb.frame.origin.y,
self.wkWeb.frame.size.width,
self.wkWeb.frame.size.height);
self.popupLogin.navigationDelegate = self;
self.popupLogin.UIDelegate = self;
[webView addSubview:self.popupLogin];
[self.popupLogin loadRequest:navigationAction.request];
return nil;
}