2016-01-24 31 views
2

我正在嘗試向已找到的WebView添加一個JavaScript接口。 我遵循所有的標準教程,仍然在與任務掙扎。 當添加JavaScript界面​​,我沒有得到任何異常或錯誤,但顯式調用JS從橋上時,我得到以下錯誤:addJavascriptInterface函數在API 21上不起作用

I/chromium: [INFO:CONSOLE(1)] "Uncaught ReferenceError: JSNativeBridge is not defined", source: (1) 

添加JavaScript接口:

new Handler(context.getMainLooper()).post(new Runnable() { 
    @Override 
    public void run() { 
     WebView webView = webViews[0]; 
     if (Constants.DEBUG_MODE) { 
      webView.setWebChromeClient(new WebChromeClient()); 
      webView.getSettings().setJavaScriptEnabled(true); 
     } 
     ImpressionSyncJsInterface impressionSyncJsInterface = new ImpressionSyncJsInterface(context); 
     webView.addJavascriptInterface(impressionSyncJsInterface, JS_BRIDGE_NAME); 
     didAddInterfaceToWebView = true; 
    } 
}); 

我的界面: 公開課ImpressionSyncJsInterface {0}私人最終上下文上下文;

public ImpressionSyncJsInterface(Context context) { 
     this.context = context; 
    } 

    @JavascriptInterface 
    public void foo() { 
     Log.e("TEST", "test"); 
    } 
} 

JavaScript執行:

final String javascriptInjectionTest = "javascript: " + JS_BRIDGE_NAME + ".foo();"; 

new Handler(Looper.getMainLooper()).post(new Runnable() { 
    @Override 
    public void run() { 
     webView.loadUrl(javascriptInjectionTest); 
    } 
}); 

任何幫助將非常感激。

+0

請把你的JavaScript調用Java類的JavaScript代碼。 –

+0

在嘗試訪問注入的對象之前,我沒有看到任何代碼加載頁面。您需要首先加載一些頁面,請參閱http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String) –

回答

9

想通了這個問題,所以我會分享我的見解:只有叫一個使用loadURL/loadData功能

addJavascriptInterface功能應用。

在我的情況 - 我期望addJavascriptInterface注入一個JS橋,但我從來沒有重新加載WebView內容,所以它從未被主動注入。

重新加載WebView HTML內容後,按預期方式添加橋接。

+1

您應該接受此爲你自己的答案,以便其他人可以更容易地找到它我自己也碰到了同樣的事情! – davidgyoung