2013-09-25 57 views
6

Tôi có một chế độ xem web trong một lần nhấp vào nút Android tải một số JavaScript vào chế độ xem web. Câu hỏi của tôi là làm cách nào để tôi chuyển biến Android sang JavaScript khi được tải.Chuyển biến từ android sang JavaScript được khởi chạy trong chế độ xem web

mã hiện tại của tôi để nạp JavaScript vào webview

private OnClickListener OnClick_grabit = new OnClickListener() { 
     public void onClick(View v) { 
      webView.loadUrl("javascript: function loadScript(scriptURL) { 
       var scriptElem = document.createElement('SCRIPT'); 
       scriptElem.setAttribute('language', 'JavaScript'); 
       scriptElem.setAttribute('src', scriptURL); 
       document.body.appendChild(scriptElem); 
       } loadScript('http://www.pathtojavascript/javascript.js');"); 
     } 
    }; 

SO tôi cần phải vượt qua một cái gì đó để javascript khởi tạo() từ Android.

+0

là kịch bản nằm ở tài sản? Hay bạn cần tải nó từ web? – gunar

+0

@gunar được tải từ trang web –

+0

Và trang web cũng được tải từ web? – gunar

Trả lời

5

Trước hết bạn cần phải tải các kịch bản một lần duy nhất (onClick của bạn đang tải nó mỗi thời gian), sau đó gọi loadUrl("javascript:initialize(" + myNumber + ");")

+0

Nó có đơn giản không? :) – gunar

+0

bạn có thể mở rộng câu trả lời của mình không? –

0

Bạn cần phải loadUrl trong WebView của bạn, tôi nhận được một cái gì đó như thế này trong ứng dụng trước đây của tôi:

webView.loadUrl("javascript:wrapJS.functionName("+value+","+value+")"+); 
2

cú pháp đúng mà làm việc đối với tôi là

StringBuilder buf=new StringBuilder("javascript:testFunction('"+bar+"','"+foo+"')"); 
Log.d(TAG, "returned string:"+buf.toString()); 
mWebView.loadUrl(buf.toString()); 
+0

Và nếu 'bar' hoặc' foo' chứa ''' thì sao? –

+0

Kết thúc tìm kiếm một ngày của tôi ở đây .. Câu trả lời thực sự tốt nhất so với những người khác –

4

Java class:

public class JavaScriptInterface { 
    Context mContext; 
    JavaScriptInterface(Context c) { 
     mContext = c; 
    }  
    @JavascriptInterface 
    public String getFromAndroid() { 
     return "This is from android."; 
    } 
} 

đang Webview:

WebView webView = (WebView) findViewById(R.id.webview); 
webView.setWebChromeClient(new WebChromeClient() {}); 
WebSettings settings = webView.getSettings(); 
settings.setJavaScriptEnabled(true); 
settings.setDomStorageEnabled(true); 
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

Html và javascript:

<input type="button" value="Get from android" onClick="getFromAndroid()" /> 
<script type="text/javascript"> 
    var myVar = null; 
    function getFromAndroid() { 
     myVar = Android.getFromAndroid(); 
     alert(myVar); 
    } 
</script> 
+0

Không hoạt động cho Android 5. –

+1

Đây là cách tốt nhất để làm điều đó. – MurifoX