我试图了解如何在iOS8中使用新的WKWebView,找不到太多信息.我读了:
http://developer.telerik.com/featured/why-ios-8s-wkwebview-is-a-big-deal-for-hybrid-development/ http://nshipster.com/wkwebkit/
但这对现有应用程序有何影响?普通的UiWebView会从nitro java脚本引擎获得加速,还是需要进行更改?我们如何处理向后兼容性?
我能找到的所有代码和示例都使用swift,这是强制性的吗?
感谢您对此事的任何帮助!
我想下载一个文件(CSV).它位于网站的登录屏幕后面.我想显示一个WKWebView允许用户登录,然后让应用程序在登录后下载文件.
我尝试WKWebView在用户登录网站后下载文件,但会话数据似乎是沙箱,因为它下载了一个带有登录表单而不是所需文件的html文档.
我也尝试WKUserScript在WKUserContentController对象中添加一个,但是在加载非HTML文件时脚本不会运行.
我是否有办法访问此文件,同时允许用户通过WKWebView?登录?
我在我的原生iPhone应用程序中,在允许登录/注册的网站上使用WKWebView,并将会话信息存储在cookie中.我试图找出如何持久存储cookie信息,因此当应用程序重新启动时,用户仍然可以使用其Web会话.
我在应用程序中有2个WKWebViews,它们共享一个WKProcessPool.我从一个共享进程池开始:
WKWebView
然后为每个WKWebView:
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
theConfiguration.processPool = processPool;
self.webView = [[WKWebView alloc] initWithFrame:frame configuration:theConfiguration];
Run Code Online (Sandbox Code Playgroud)
当我使用第一个WKWebView登录,然后一段时间后将操作传递给第二个WKWebView时,会话保留,因此cookie已成功共享.但是,当我重新启动应用程序时,会创建一个新的进程池并销毁会话信息.有没有办法让会话信息通过应用程序重启持续存在?
在我的应用程序中,我有一个屏幕,用户可以单击不同类型的文件来查看和下载它们.但是,只有在用户通过网站登录后才能访问此屏幕.
我使用此方法使用我的URL启动Safari浏览器:
UIApplication.sharedApplication().openURL(NSURL(string: url)!)
Run Code Online (Sandbox Code Playgroud)
但是,用户被重定向到登录屏幕,因为他还没有被授权使用该网站.
我的问题是,如何将cookie或标题传递给Safari并使用这些URL启动URL?
当我WKWebView使用身份验证cookie 创建新请求并发送请求时,WKWebView正确加载受保护的网页:
let req = NSMutableURLRequest(URL: NSURL(string: urlPath)!)
let headers = NSHTTPCookie.requestHeaderFieldsWithCookies([myAuthCookie]);
req.allHTTPHeaderFields = headers;
webView.loadRequest(req)
Run Code Online (Sandbox Code Playgroud)
问题是,当用户点击网页中的任何链接时,新请求将WKWebView丢失身份验证cookie并重定向到登录页面.Cookie域和路径已填充且正确.
我知道这里WKWebView提到的功能缺失.
提前感谢任何想法.
我正在转换应用程序UIWebView,WKWebView并且有一个自动登录功能,该功能是通过保存带有用户身份验证信息的cookie来处理的NSHTTPCookieStorage.但是,WKWebView似乎没有查看cookie的这个位置,因此每次都会提示用户使用登录屏幕.
是否需要激活WKWebView正确使用cookie?
我发送请求到url1.url1将使用cookie重定向到url2.url2用于授权.我得到代码"302 found",这是正确的.但是当url2重定向回url1时,cookie丢失了.这导致我的请求保持重定向到url2,循环直到失败.
有没有人遇到过这种问题并且知道解决方案?提前致谢.
这是一个WKWebView问题.UIWebView可以正常工作.但不知何故,我需要改为使用WKWebView.
我已经尝试了很多解决方案,例如我可以设置WKWebView使用的cookie吗?.这些方法可以处理同一域中的cookie.我的问题是url1和url2有不同的域名.重定向时,cookie丢失,导致授权失败,导致url1和url2之间的循环.
有没有人遇到这个问题并找到了解决方法?提前致谢.
内容:
我有一个使用的iOS Cordova应用程序WKWebView。我需要拦截WKWebView无法使用http|httpsscheme的请求(可以使用,UIWebView但我必须移至WKWebView)。因此,我在科尔多瓦config.xml
<content src="xyz://host.domain.com/app" />
<allow-navigation href="xyz://*/*" />
Run Code Online (Sandbox Code Playgroud)
并且我已经配置WKWebView为处理(拦截)xyz://方案:
[configuration setURLSchemeHandler:self forURLScheme:@"xyz"];
Run Code Online (Sandbox Code Playgroud)
将Safari检查器附加到我的iPhone document.origin输出之后xyz://host.domain.com。
假设一GET对https://host.domain.com/app/foo具有下列头响应:
Set-Cookie: a=1; Domain=host.domain.com; Path=/
Set-Cookie: b=2; Domain=host.domain.com; Path=/; Secure
Set-Cookie: c=3; Domain=host.domain.com; Path=/; Secure; HttpOnly
Run Code Online (Sandbox Code Playgroud)
使用NSURLSessionDataTask做出GET对https://host.domain.com/app/foo我建立NSHTTPCookie从物体Set-Cookie上面的响应报头,并将其存储在WKHTTPCookieStore我的WKWebView使用
[wkWebView.configuration.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:^{
NSLog(@"SET COOKIE\n%@", cookie);
}];
Run Code Online (Sandbox Code Playgroud)
按照这个答案。Cookies设置正确,可以使用进行检索
[wkWebView.configuration.websiteDataStore.httpCookieStore …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中嵌入了WKWebView.它使用PHP会话cookie来识别用户.我通过以下调用获取会话cookie:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:jsonobject options:0 error:&err]];
NSHTTPURLResponse *response = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
Run Code Online (Sandbox Code Playgroud)
基于此:我可以设置WKWebView使用的cookie吗?我将cookie添加到文档中
for (NSHTTPCookie* cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies)
{
NSString *javascript = [NSString stringWithFormat:@"document.cookie = '%@=%@';", [cookie name], [cookie value]];
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
WKUserContentController *ucController = [[WKUserContentController alloc] init];
WKProcessPool *processPool = [[WKProcessPool alloc] init];
config.processPool = processPool;
config.userContentController = ucController;
[ucController addUserScript:[[WKUserScript alloc] initWithSource:javascript injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]];
}
Run Code Online (Sandbox Code Playgroud)
我在初始加载请求中手动设置会话cookie:
NSMutableURLRequest *pageLoadRequest = [NSMutableURLRequest requestWithURL:[NSURL …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用上添加移动,桌面版网站功能.但问题是User Agent只能在webView加载之前立即更改.在我的应用程序中,我添加按钮一个Mobile和Desktop版本站点的第二个.UIWebView选择User Agent刚开始.任何人都告诉我有没有办法User Agent在运行时更改.谢谢
var defaultUserAgent = String()
@IBOutlet weak var webView: UIWebView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "https://www.youtube.com")
let request = NSURLRequest(URL: url!)
activityIndicator.hidesWhenStopped = true
activityIndicator.startAnimating()
webView.loadRequest(request)
}
@IBAction func mobile(sender: AnyObject) {
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": defaultUserAgent])
print(defaultUserAgent)
let url = NSURL(string: "https://www.youtube.com")
let request = NSURLRequest(URL: url!)
activityIndicator.hidesWhenStopped = true
activityIndicator.startAnimating()
webView.loadRequest(request)
}
@IBAction func desktop(sender: AnyObject) { …Run Code Online (Sandbox Code Playgroud) 我们的客户最近要求我们从 WebView 切换到 WKWebView。他们的应用程序使用本机登录,这是通过对后端的 2 次 POST 调用完成的,返回各种授权 cookie,这些 cookie 稍后在整个应用程序的每个 HTTP/AJAX 调用中使用。
使用 WebView,无需实现单行自定义代码,一切都变得非常迷人。用户登录后,cookie 默认存储到 cookie 存储中,WebView 总是从那里获取并使用它们,因为 HTTPCookieStorage 在 NSURLSession 和 WebView 之间共享。
WKWebView 是一个全新的故事。一旦我们将 WebView 切换到 WKWebView,我们看到授权不起作用。这是由于在 WKWebView 中丢失了一些 cookie。我们现在存储来自 NSURLSession 响应的 cookie,并通过向 HTTP 请求添加“Cookie”标头来手动将它们附加到 WKWebView。
我们能够以这种方式获得 HTTP 调用的授权,但现在我们看到了一个新问题。不知何故,在 WKWebView 中完成的所有 AJAX 调用都会丢失授权 cookie。
您是否知道是否有任何方法可以让授权 cookie 也出现在 AJAX 调用中?注入javascript
javascriptCookieString = @"document.cookie = 'testCookie=testValue';";
[self.webView evaluateJavaScript:javascriptCookieString completionHandler:nil];
Run Code Online (Sandbox Code Playgroud)
不起作用,似乎无法控制 Javascript 调用,因此我无法在执行请求之前更改请求。谢谢你。
我正在尝试WKWebView在我的iOS应用程序中设置一个带有身份验证信息的cookie,但我找不到在Swift中设置cookie的方法.我看到了一些问题,但所有答案都在Objective-C.我试图为Swift解决方案做一些想法,但我也是iOS开发的新手.我尝试过这样的事情:
let request = NSMutableURLRequest(url: myUrl! as URL)
request.addValue("CookieKey=value", forHTTPHeaderField: "Cookie")
Run Code Online (Sandbox Code Playgroud)
但它不起作用.当我加载页面时,尚未设置cookie.谁能帮我?