繁体   English   中英

如何在OS X Yosemite中更改WKWebview的用户代理?

[英]How do I change the WKWebview's user agent in OS X Yosemite?

如何更改WKWebview使用的用户代理?

使用较旧的WebView ,我可以编写以下内容来更改用户代理:

[myWebView setCustomUserAgent:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4)
 AppleWebKit/537.77.4 (KHTML,like Gecko) Version/7.0.5 Safari/537.77.4"];

在Swift中非常简单。 只需将以下内容放入App Delegate didFinishLaunchingWithOptions

NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent" : "Custom Agent"])

如果要附加到现有代理字符串,则:

let userAgent = UIWebView().stringByEvaluatingJavaScriptFromString("navigator.userAgent")! + " Custom Agent"
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent" : userAgent])

注意:您需要卸载并重新安装应用程序,以避免附加到现有代理字符串。

我对此没有答案。 但是,到目前为止,我的研究中有一些指示:

在iOS中,可以为UIWebView设置自定义用户代理,如下所示:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:agent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

在OSX中,有一个用于WebView元素的setCustomUserAgent方法。

但是,这对WKWebView不起作用(至少在OSX中)。 我也找不到Apple的任何文档。

希望有人可以帮忙!

我遇到了同样的问题,但设法使用loadHTMLString上的WKWebViewNSMutableURLRequest的组合来解决这个问题。

我对如何在WKWebView上调用某个方法的WKWebView引导我访问http://trac.webkit.org/changeset/165594 ,这意味着有一个私有方法_setCustomUserAgent来执行此操作。 我对cocoa / swift的熟练程度不足以说明这一点。

我最终使用下面的代码,因为我真的只需要获取单个URL的内容并显示它,但它可能在某种程度上有所帮助。 它的作用是简单地将URL的内容作为字符串加载到WKWebView中,我怀疑你可能会丢失后退/前进导航等等,它只适用于初始页面显示,因为WKWebView将接管点击和资源加载。

(请注意,此示例是用Swift编写的,而不是Objective-C)

self.webView = WKWebView(frame: webViewRect, configuration: webViewConfig)

//  create the request
let url = NSURL(string: "https://example.com/")
let request = NSMutableURLRequest(URL: url!)
request.setValue("YourUserAgent/1.0", forHTTPHeaderField: "User-Agent")

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
    let content = NSString(data: data, encoding: NSUTF8StringEncoding)
    self.webView!.loadHTMLString(content!, baseURL: url)
}

这可能不太理想,但您可能会实现自定义NSURLProtocol处理程序来拦截HTTP请求并使用您的自定义用户代理标头修改它们。 我认为这不适用于iOS,因为WKWebView会在进程外发出请求并绕过任何已注册的NSURLProtocols。 但它可能适用于OS X?

通过用户在文本字段中输入URL,您可以使用NSMutableURLRequest对象完全控制NSURLRequest,并为其设置标题字段。

但是,根据用户在Web视图中实际点击的内容,您无法控制明显且清晰记录的Objective-C域。 除了WKWebView似乎推动的事情,我没有看到任何记录的方式,JavaScript。 所以,这意味着你可以做点这里发布的事情: 在javascript中模拟一个useragent? 使用脚本注入API。

这就是我不喜欢WKWebView的原因。 我想要它,但我不想学习用JavaScript做一半的事情。

因此,您可以创建一个WKUserScript对象来执行此操作,并将其注入时间设置为WKUserScriptInjectionTimeAtDocumentStart。 这将使您能够处理文档中页面元素所请求的内容,只要页面本身不加载其他冲突的脚本。

首先退出Safari。 然后打开终端并粘贴此命令,然后按Enter键:

默认写入com.apple.Safari CustomUserAgent“\\”Mozilla / 5.0(Macintosh; Intel Mac OS X 10_9_0)AppleWebKit / 538.46(KHTML,类似Gecko)版本/ 7.1 Safari / 537.85.7 \\“”

打开Safari,你就完成了。

要撤消此更改,请关闭Safari并将此命令粘贴到终端:

默认删除com.apple.Safari CustomUserAgent

有时可能需要重新启动才能使这些更改坚持,不确定原因,可能是缓存的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM