相关疑难解决方法(0)

如何迁移到WKWebView?

我试图了解如何在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,这是强制性的吗?

感谢您对此事的任何帮助!

uiwebview ios8 wkwebview

58
推荐指数
7
解决办法
9万
查看次数

如何使用WKWebView检索文件?

我想下载一个文件(CSV).它位于网站的登录屏幕后面.我想显示一个WKWebView允许用户登录,然后让应用程序在登录后下载文件.

我尝试WKWebView在用户登录网站后下载文件,但会话数据似乎是沙箱,因为它下载了一个带有登录表单而不是所需文件的html文档.

我也尝试WKUserScriptWKUserContentController对象中添加一个,但是在加载非HTML文件时脚本不会运行.

我是否有办法访问此文件,同时允许用户通过WKWebView?登录?

webkit ios ios8 wkwebview

35
推荐指数
2
解决办法
2万
查看次数

WKWebView持久存储Cookie

我在我的原生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已成功共享.但是,当我重新启动应用程序时,会创建一个新的进程池并销毁会话信息.有没有办法让会话信息通过应用程序重启持续存在?

cookies ios wkwebview

32
推荐指数
5
解决办法
2万
查看次数

如何在iOS中使用预设的cookie或标题在Safari中打开URL?

在我的应用程序中,我有一个屏幕,用户可以单击不同类型的文件来查看和下载它们.但是,只有在用户通过网站登录后才能访问此屏幕.

我使用此方法使用我的URL启动Safari浏览器:

UIApplication.sharedApplication().openURL(NSURL(string: url)!)
Run Code Online (Sandbox Code Playgroud)

但是,用户被重定向到登录屏幕,因为他还没有被授权使用该网站.

我的问题是,如何将cookie或标题传递给Safari并使用这些URL启动URL?

objective-c ios swift

12
推荐指数
1
解决办法
2539
查看次数

在WKWebView中丢失cookie

当我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提到的功能缺失.

提前感谢任何想法.

cookies nsmutableurlrequest wkwebview

10
推荐指数
2
解决办法
1万
查看次数

WKWebView cookie存储位置

我正在转换应用程序UIWebView,WKWebView并且有一个自动登录功能,该功能是通过保存带有用户身份验证信息的cookie来处理的NSHTTPCookieStorage.但是,WKWebView似乎没有查看cookie的这个位置,因此每次都会提示用户使用登录屏幕.

是否需要激活WKWebView正确使用cookie?

objective-c ios wkwebview

10
推荐指数
1
解决办法
1万
查看次数

当使用代码302重定向时,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 wkwebview

6
推荐指数
2
解决办法
4630
查看次数

在WKHTTPCookieStore中设置cookie时,WKWebView不会更新document.cookie

内容

我有一个使用的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

假设一GEThttps://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做出GEThttps://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)

cookies ios cordova wkwebview wkhttpcookiestore

6
推荐指数
0
解决办法
242
查看次数

WKWebView不发送会话cookie

我在我的应用程序中嵌入了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)

cookies session-cookies ios wkwebview

5
推荐指数
1
解决办法
2477
查看次数

用户代理在运行时更改

我正在尝试在我的应用上添加移动,桌面版网站功能.但问题是User Agent只能在webView加载之前立即更改.在我的应用程序中,我添加按钮一个MobileDesktop版本站点的第二个.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)

uiwebview swift swift2

5
推荐指数
1
解决办法
573
查看次数

WKWebView AJAX 调用丢失 cookie

我们的客户最近要求我们从 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 调用,因此我无法在执行请求之前更改请求。谢谢你。

cookies ajax objective-c ios wkwebview

4
推荐指数
1
解决办法
4331
查看次数

如何在Swift上的WkWebView上设置Cookies?

我正在尝试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.谁能帮我?

cookies ios swift wkwebview

2
推荐指数
1
解决办法
4801
查看次数