javascript在iOS9 + Swift 2.0上不起作用

时间:2015-09-16 10:18:18

标签: javascript ios swift2 wkwebview

我一直在使用WKWebView。

我想在iOS9 + Swift 2.0上运行javascript。 但它无法发挥作用。

console.log(" hoge")甚至无法正常工作。

我的代码在这里

import UIKit

class CommonWebVCL: GABase,UIWebViewDelegate,UIScrollViewDelegate,WKNavigationDelegate,WKUIDelegate {

    var webview: WKWebView!

    var str_url:String! = ""
    var url:String!
    var gobackSearch:Bool! = false

    var previousScrollViewYOffset:CGFloat? = 0
    var toolbarheight:CGFloat = 0
    var analytics_category:String!


    override func viewDidLoad() {
        super.viewDidLoad()
        changeUserAgent()


        let webViewConfiguration = WKWebViewConfiguration()


        self.webview = WKWebView(frame: self.view.bounds, configuration: webViewConfiguration)

        self.webview.navigationDelegate = self
        self.webview.UIDelegate = self
        addObserverForWKWebView()
        self.view.addSubview(webview)

        setBackButton()

    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        navigationBarInit()
        //タブの遷移でdelegateが外れるので貼り直す
        self.webview.scrollView.delegate = self

    }

    func setBackBtnForWeb(){
        let leftbtn = UIButton(frame: CGRect(x: 0, y: 0, width: 48, height: 22))
        leftbtn.setImage(UIImage(named: "back_btn"), forState: .Normal)
        leftbtn.addTarget(self, action: "goBackForWeb:", forControlEvents: UIControlEvents.TouchUpInside)
        let backButton = UIBarButtonItem(customView: leftbtn)
        self.navigationItem.setLeftBarButtonItem(backButton, animated: true)

    }

    func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!){
        // インジケータを表示する

        if let tmpstr_url = self.webview.URL?.absoluteString{
            if (tmpstr_url.rangeOfString("tel") == nil){
                SVProgressHUD.show()
            }
        }

    }

    func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!){
        // インジケータを表示する
        if SVProgressHUD.isVisible(){
            SVProgressHUD.dismiss()
        }

    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        navigationBarInit()

        let URL = NSURL(string: url)
        let urlRequest: NSURLRequest = NSURLRequest(URL: URL!)
        self.webview.loadRequest(urlRequest)

    }

    override func viewDidLayoutSubviews() {


        self.webview.frame = self.view.bounds

        navigationBarInit()
    }


    override func viewDidDisappear(animated: Bool) {


        super.viewDidDisappear(animated)
        if SVProgressHUD.isVisible(){
            SVProgressHUD.dismiss()
        }
        if (self.gobackSearch != nil){
            sendEvent(analytics_category, str_action: "back")
            self.navigationController?.popViewControllerAnimated(true)
        }

        self.webview.scrollView.delegate = nil
        self.webview.navigationDelegate = nil
        self.webview.stopLoading()
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    }




    func addObserverForWKWebView(){

        self.webview.addObserver(self, forKeyPath: "canGoBack", options: NSKeyValueObservingOptions.New, context: nil) // WEBページで戻ることができるか監視のため、Observerに追加
        self.webview.addObserver(self, forKeyPath: "URL", options: NSKeyValueObservingOptions.New, context: nil) // WEBページで戻ることができるか監視のため、Observerに追加
    }

    // Observerで監視対象のプロパティに変更があったときの処理
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        if object!.isEqual(webview){
            if keyPath == "estimatedProgress"{
                self.navigationController?.setSGProgressMaskWithPercentage(Float(self.webview.estimatedProgress*100))
                navigationBarInit()
            }else if keyPath == "canGoBack"{


            }else if keyPath == "URL"{
                if let tmpstr_url = self.webview.URL?.absoluteString{
                    self.str_url = tmpstr_url
                    handleUrl()

                }
            }
        }
    }
    //URLを見て何かするところ
    func handleUrl(){

    }

    // 画面を閉じるときにObserverを削除。削除しないとアプリ落ちる
    deinit{
        if self.webview != nil{
            //self.webview.removeObserver(self, forKeyPath: "estimatedProgress", context: nil)
            self.webview.removeObserver(self, forKeyPath: "canGoBack", context: nil)
            self.webview.removeObserver(self, forKeyPath: "URL", context: nil)
        }


    }
    @IBAction func goBackForWeb(sender: AnyObject) {
        if self.webview.canGoBack{

            webview.goBack()

        }else{
            self.navigationController?.popViewControllerAnimated(true)
        }

    }

    func webViewDidStartLoad(webView: UIWebView){
        SVProgressHUD.showWithStatus("読み込み中")
        navigationBarInit()
    }

    func webViewDidFinishLoad(webView: UIWebView){
        SVProgressHUD.dismiss()

    }

    func webView(webView: UIWebView, didFailLoadWithError error: NSError?){
        SVProgressHUD.dismiss()
    }

    func webView(webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: () -> Void){
        let alertController = UIAlertController(title: frame.request.URL?.host, message: message, preferredStyle: .Alert)
        alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: { action in
            completionHandler()
        }))
        self.presentViewController(alertController, animated: true, completion: nil)
    }



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



}

这是什么问题?

顺便说一句,这个问题只有swift2.0的iOS9。 它可以在其他平台上正常工作,包括iOS9 by swift 1.2。

1 个答案:

答案 0 :(得分:0)

我可以自己解决。 此网页始终使用http协议。 所以我改变了https协议,javascript工作正常。