gpt4 book ai didi

ios - WKWebView 不会打开社交媒体登录弹出窗口

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:00:41 24 4
gpt4 key购买 nike

我的应用程序中有一个 WKWebView。除了我显示的网站有社交媒体登录按钮外,一切都运行顺利。问题是,他们显示(或尝试显示)一个弹出窗口,您允许它访问您的社交媒体帐户。我对此进行了研究并尝试了一些方法,但似乎都不合适。这是我尝试过的:

在 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 logic,取消请求并在主视图中重新加载它,这是一个简单的单行修复,因为它已经膨胀到 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;
}

最佳答案

Swift 4 和 Swift 5

创建两个WKWebView实例

var webView : WKWebView!
var newWebviewPopupWindow: WKWebView?

现在实现方法

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
newWebviewPopupWindow = WKWebView(frame: view.bounds, configuration: configuration)
newWebviewPopupWindow!.autoresizingMask = [.flexibleWidth, .flexibleHeight]
newWebviewPopupWindow!.navigationDelegate = self
newWebviewPopupWindow!.uiDelegate = self
view.addSubview(newWebviewPopupWindow!)
return newWebviewPopupWindow!
}

func webViewDidClose(_ webView: WKWebView) {
webView.removeFromSuperview()
newWebviewPopupWindow = nil
}

如果您的代码仍然无法正常工作,还要确保 Info.plist 中有此字符串。

 <key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

关于ios - WKWebView 不会打开社交媒体登录弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com