簡體   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