2017-04-17 32 views
2

ページが読み込まれる前にグローバルJavaScript関数をWebビューに挿入しようとしています。私は私が注射だとtestJSと呼ばれる機能を持っている。私はページを閲覧すると、私のWebViewClientで、私は次のようページの読み込み時にWebViewにjavascript関数を挿入

private String getJS() { 
    return "javascript:function testJS() { return { test: 'Hello World' };}"; 
} 

@Override 
public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    view.loadUrl(getJS()); 
} 

をやって、window.testJSは未定義です。

私が以下を行う場合、window.testJSはwebviewで正しい機能を持っていますが、十分に早く読み込まれていないので正しく動作しません。

@Override 
public void onPageFinished(WebView view, String url) { 
    view.loadUrl(getJS()); 
} 

は、iOSに私はスクリプトatDocumentStartを注入すると同等の操作を行うことができ、それは、私はそれが期待するように動作します。

let userScript = WKUserScript(
     source: scriptContent!, 
     injectionTime: WKUserScriptInjectionTime.atDocumentStart, 
     forMainFrameOnly: false) 
contentController.addUserScript(userScript) 

私はこれをAndroid WebViewで実現できる別の方法はありますか?これはPageFinishedでは動作しますが、onPageStartedでは動作しません。

答えて

-1

まず設定機能としてJavaScriptを可能にしてみてください。そして、

WebSettings webSettings = yourWebView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 

yourWebView.addJavascriptInterface(new Object(){ 
     @JavascriptInterface 
     public void test(){ 
      Log.d("JS", "test"); 
      } 
    },"Android"); 
yourWebview.loadUrl("javascript:functionName(\"" + argument + "\")"); 

は、これらの質問を参照してください。

Android Calling JavaScript functions in WebView

Call javascript function in Android WebView

+0

有効です。それは問題ではありません。問題はJavaScriptがonPageStartedから正しくロードされていないことです。 – kittels

+0

私は私の答えを更新しました。それを試してみてください –

+0

JavaScriptはどこに行きますか?とにかくjavacript関数をロードするだけの場合、インターフェイスのポイントは何ですか – kittels

関連する問題