2016-05-20 3 views
3

WebサイトからJavascriptInterfaceチャンネルをUIWebViewに作成するにはどうすればよいですか?アンドロイドでSwiftのUIWebViewとJavaScriptInterface

例:

webView.addJavascriptInterface(new WebAppInterface(this), "Android"); 

そしてこのJavascriptInterfaceから私は、例えばとして、方法を描画したいと思います:

func webViewDidStartLoad(webView: UIWebView) 

または

myActivityIndicator.startAnimating() 

を私はどのように行うことができます?ここで

答えて

7

:ソースのUIWebViewのためにhere

はJavaScript

function callNativeApp() { 
    try { 
      webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript"); 
    } catch(err) { 
      console.log('The native context does not exist yet'); 
    } 
} 

スウィフト

import WebKit 
class ViewController: UIViewController, WKScriptMessageHandler { 

    @IBOutlet var containerView: UIView? = nil 

    var webView: WKWebView? 

    override func loadView() { 
     super.loadView() 

     let contentController = WKUserContentController() 
     contentController.addScriptMessageHandler(self, name: "callbackHandler") 
     let config = WKWebViewConfiguration() 
     config.userContentController = contentController 

     self.webView = WKWebView(frame: self.containerView!.bounds, configuration: config) 
     self.view = self.webView 

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //I use the file html in local 
     let path = NSBundle.mainBundle().pathForResource("index", ofType: "html") 
     let url = NSURL(fileURLWithPath: path!) 
     let req = NSURLRequest(URL: url) 
     self.webView!.loadRequest(req) 

    } 

    fun userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) { 
     if (message.name == "callbackHandler"){ 
      print("\(message.body)") 
     } 
    } 

} 

:HTML

0123でソース here

のJavaScript WKWebView内のローカルのHTMLファイルをロードする方法

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script> 
     (function(){ 
      $(window).load(function(){ 

       $('.clickMe').on('click', function(){ 
        window.location = "foobar://fizz?Hello_from_javaScript"; 
       }); 
      }); 
     })(jQuery); 
    </script> 

スウィフト

import UIKit 
class ViewController: UIViewController, UIWebViewDelegate { 

    @IBOutlet weak var Web: UIWebView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    let path = NSBundle.mainBundle().pathForResource("index", ofType: "html") 
     let url = NSURL(fileURLWithPath: path!) 
     let req = NSURLRequest(URL: url) 
     Web.delegate = self 
     Web.loadRequest(req) 
    } 

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
     if request.URL?.query != nil { 
      print("\(request.URL!.query!)") 
     } 
     return true 
    } 

} 
+0

? – Raghuram

4

は簡単な例です:

  1. Xcodeの
  2. でそのようなfoobarとしてURLスキームを登録し、このURLスキームを扱うウェブビューで

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
        if request.URL?.query?.containsString("show_activity_indicator=true") { 
         myActivityIndicator.startAnimating() 
        } 
    } 
    
  3. 最後に、あなたからこれを呼び出しますJavaScript

    // Show your activity indicator from JavaScript. 
    window.location = "foobar://fizz?show_activity_indicator=true" 
    

:iOSのウェブビュー通信の詳細については、my question hereを参照してください。 WKWebViewについては

関連する問題