

SwiftでWebViewを使いガワネイティブのアプリを開発しています。  
UIViewControllerから値を外部JSで宣言している関数へ値を送れません。  
何故でしょうか？

以下コードで、window.a()は呼び出せますが、window.hoge()が呼び出せません。  
index.htmlにてwindow.hoge()を呼び出すトンネルを作るしかないのでしょうか？

HogeViewController.swift(抜粋)

[code]

    let webView: UIWebView = UIWebView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        webView.frame = view.bounds
        webView.delegate = self
        view.addSubview(webView)
    
        let path = NSBundle.mainBundle().pathForResource("html/index", ofType: "html")!
        let url = NSURL(string: path)!
        let urlRequest = NSURLRequest(URL: url,
            cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 60.0)
        webView.loadRequest(urlRequest)
    
        println("url : " + path)
    
    }
    
    //略
    //何らかのイベントにより、onLoad後、WebViewに送信
    webView.stringByEvaluatingJavaScriptFromString("window.a('" + "hoge" + "')")
    webView.stringByEvaluatingJavaScriptFromString("window.Hoge('" + "hoge" + "')")
    
[/code]

HTMLとJSファイル

index.html(部)

[code]

    <script type="text/javascript" src="./js/hoge.js"></script> 
    <script type="text/javascript">
    function a(arg){
        window.log(arg.length);
    }
    
    </script>
    
[/code]

hoge.js

[code]

    window.hoge = function(binay){
        window.log("recodedMovie");
    
        return true
    }
    
    window.log = function(str){
        console.log(new Date() + " : " + str);
    
        // ログ送信に使用する機能を実装
        var strBase64 = encodeURIComponent(str)
        var URL = "nativehoge://log/"
    
        // ログをネイティブに送信
        var iframe = document.createElement("IFRAME");
        iframe.setAttribute("src", URL + strBase64);
        document.documentElement.appendChild(iframe);
        iframe.parentNode.removeChild(iframe);
        iframe = null;
    
    };
    
[/code]

以上です。  
宜しくお願いします。


CC BY-SA 3.0
2015-07-07T03:32:10.643
12106
2015-08-06T10:28:46.447
2015-08-06T10:28:46.447
8000
207
question
javascript swift xcode xcode6 webview
外部JSのfunction Window.hogeが呼べないのは何故ですか？


ここですが、

> webView.stringByEvaluatingJavaScriptFromString("window.Hoge('" + "hoge" +
> "')")

`window.hoge('" + "hoge" + "')` の間違いではないでしょうか？


CC BY-SA 3.0
2015-07-07T09:05:24.437
12116
2015-07-07T09:05:24.437
2299
12106
answer