2016-01-24 124 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