少しiOSプログラミングを学習する練習の一部として、そして私がiPad上にWhatsAppクライアントを持っていたら、私は個人的にWhatsAppクライアントとして使用できるアプリケーションを作成しようとしています私のiPadのために。 UIWebViewのweb.whatsapp.comデスクトップサイトは次のようにロードされます。UIWebViewデスクトップWebサイトが動作しない
override func viewDidLoad() {
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17"])
super.viewDidLoad()
self.webView.frame = self.view.bounds
self.webView.scalesPageToFit = true
// Do any additional setup after loading the view, typically from a nib.
let url = NSURL(string: "https://web.whatsapp.com")
let requestObj = NSMutableURLRequest(URL: url!)
webView.loadRequest(requestObj)
//webView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}
これは問題なく動作します。サーバーがモバイルデバイスを検出したときに通常発生するように、whatsappホームページにリダイレクトするのではなく、実際には正しいwebappをロードします。しかし、むしろにおけるログのQRコード画面を私に提示するよりも、それがこれで私を提示:
今、私は私のiPad上のSafariからのWhatsApp Webを使用(とデスクトップバージョンを要求する)場合には、それ完全にうまく動作します。ご覧のとおり、UserAgentを設定して、私のUIWebViewのデスクトップサイトをリクエストしています。今、私はUIWebViewでうまくいかない理由と、UIWebViewコントロール内でアプリケーションを動作させるために設定する必要がある別のヘッダーや値があるのかどうか疑問に思っています。
EDIT
IはスイフトへのObjective-CからボリスVerebskyのコードを変換することによってWKWebViewに変更されています。しかし、最初は同じ画面が表示されていましたが(別のブラウザを使用するように指示しています)、変更して機能させようとすると、空白の画面が表示されます。もう何も表示されません。
それが現在立っているように、これは私の完全なコードです:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
self.webView = WKWebView(frame: self.view.bounds)
if #available(iOS 9.0, *) {
self.webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17"
} else {
// Fallback on earlier versions
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17"])
}
self.view!.addSubview(self.webView)
self.webView.navigationDelegate = self
// Do any additional setup after loading the view, typically from a nib.
let url: NSURL = NSURL(string: "http://web.whatsapp.com")!
let urlRequest: NSURLRequest = NSURLRequest(URL: url)
webView.loadRequest(urlRequest)
}
func webView(webView: WKWebView, decidePolicyForNavigationAction: WKNavigationAction, decisionHandler: WKNavigationActionPolicy -> Void) {
decisionHandler(.Allow)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
それはスウィフトへのObjective-Cからの私の変換が間違っている可能性があります。私はObjective-Cによく慣れていないので、かなり可能性があります。
コードは正しいです。あなたが空白のビューを持っている理由は、トランスポートのセキュリティです。 (https:// web.whatsapp.comをURLの代わりに使用するか(HTTPではなくHTTPSに注意)、アプリケーションのinfo.plistに 'NSAllowsArbitraryLoads:YES'を追加してください。 –
@BorisVerebskyありがとうございます、それは現在動作します。私がそれを終了と呼ぶ前に克服すべき他のいくつかの問題だけ! – Luke