2017-04-27 317 views
0

目前我試圖找出哪些是從android調用JavaScript的最佳方式。Android WebView evaluateJavascript Uncaught ReferenceError

我試過AndroidJSCore,這是偉大的。但它會放大apk大小。 然後我試圖潛入WebView來調用JavaScript。但失敗。

活動是這樣的:

public class WebViewActivity extends AppCompatActivity { 

private WebView webView; 
private static final String TAG = WebViewActivity.class.getSimpleName(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_web_view); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    webView = (WebView)findViewById(R.id.webview); 

    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
    webSettings.setSupportZoom(true); 
    webSettings.setDisplayZoomControls(true); 

    webView.loadUrl("file:///android_asset/jsWeb/test.html"); 
    webView.setWebViewClient(new WebViewClient(){ 
     public void onPageFinished(WebView view, String url){ 

      String test1 = "permissionRegist(\"'function'\", [\"'319609831167500021'\",\"'319609831167500022'\",\"'319609831167500023'\",\"'419609839767500020'\",\"'644731700926740003'\",\"'644731700926740004'\",\"'854885785357389824'\",\"'854995673156816896'\",\"'855001385022918656'\",\"'855009454683459584'\",\"'855298661779902464'\",\"'855303143108513792'\",\"'855347061611171840'\",\"'855356859882803200'\"])"; 
      String test2 = "evalJSExpression()"; 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
       webView.evaluateJavascript(test1, new ValueCallback<String>() { 
        @Override 
        public void onReceiveValue(String s) { 
         Log.d(TAG, s); 
        } 
       }); 

       webView.evaluateJavascript(test2, new ValueCallback<String>() { 
        @Override 
        public void onReceiveValue(String s) { 
         Log.d(TAG, s); 
        } 
       }); 
      } 
     } 
    }); 

} 

}

有附加文件是:

android.js

function permissionRegist(type, list) { 
 
    var s_permissionMap = new Map(); 
 
    s_permissionMap.set(type, list); 
 
} 
 

 
function evalJSExpression() { 
 
    var result = 'dddddd'; 
 
    return result; 
 
}

<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 
    <title>LogicalExpression</title> 
 

 
    <!-- 導入script --> 
 
    <script type="text/javascript" src="android.js"></script> 
 
</head> 
 

 
<body> 
 
<!--<button onClick="permissionRegist()">點擊讀取文件</button>--> 
 
</body> 
 

 
</html>

但結果是:

I/chromium: [INFO:CONSOLE(2)] "Uncaught ReferenceError: Map is not defined", source: file:///android_asset/jsWeb/android.js (2) 
D/WebViewActivity: null 
D/WebViewActivity: "dddddd" 

回答

0
+0

是的,我試過了。但它似乎不太好,然後我轉向AndroidJSCore lib。 –

+0

您是否嘗試過反應原生。您可能無法調用JavaScript。但是,您可以將您的JavaScript應用轉換爲本地應用,並且可以從您現有的本機應用中調用。 https://facebook.github.io/react-native/docs/integration-with-existing-apps.html – NSK

+0

我們正在嘗試通過javascript函數來計算一些數據,所以android&iOS都可以使用javascript源代碼,當然,這是一小組代碼。但其他的是本地代碼。我們還沒有考慮使用ReactNative。由於一些商業原因... @NSK –

0

AndroidJSCore是Android的一個偉大的LIB調用JavaScript的沒有的WebView 。 看來,原生WebView和犀牛可能有一些可編譯的問題,由於不同版本的JavaScript。 歡迎與我聯繫。 我會發現爲什麼當我有時間。

相關問題