2010-11-22 23 views
0

我用下面的代碼在我的JavaScript文件中的android提取一個字符串變量:addJavascriptInterface犯規返回一個字符串值的Android

這我的JavaScript文件:

<script language="javascript"> 

EDIT: 
clsVariable = "vikrant"; 

function refuseClick(){ 
clsVariable = "vikrant"; 
refuse.performClick(); 
document.getElementById("no").value = "Refuse"; 
} 

</script> 

<button type="button" id="no" onClick="refuseClick();">Je refuse</button> 

</div> 
</body> 
</html> 

在我的Android I類在點擊按鈕時寫下面的方法。這個按鈕點擊事件我打電話從JavaScript文件:

refuse.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Log.v(LOG_TAG, "variable=" + clsVariable); //This shows me null 
} 
}); 
wbvw = (WebView) findViewById (R.id.webvw); 

wbvw.setWebViewClient(new HelloWebViewClient()); 
    wbvw.getSettings().setJavaScriptEnabled(true); 

    WebSettings ws = wbvw.getSettings(); 
    ws.setJavaScriptEnabled(true); 
    wbvw.addJavascriptInterface(clsVariable, "clsVariable"); 
    wbvw.loadUrl("http://www.sbc.co.in/projects/AndroidTest.html"); 
} 

我是新來這個平臺以及javascripting。

這是什麼,我做錯了? 任何人都可以請幫忙嗎?

Thanx提前。

回答

6

它看起來像你濫用addJavascriptInterface()。該方法允許你將一些java對象暴露給javascript。然後你可以用javascript調用對象的方法,這些調用將被轉移到'真正的'java對象。例如,可以聲明這樣的嵌套類來訪問Java字段:

class ClsAccessor { 
    public void setValue(String value){ 
      YourOuterClassName.this.clsVariable = value; 
    } 
} 

然後,類的實例傳遞到addJavascriptInterface()方法:

wbvd.addJavaScriptInterface(new ClsAccessor(), "accessor"); 

然後,設定一個值,以你的類領域,你需要從JavaScript上accessor對象調用的setValue()方法(例如,在上單擊處理程序):

accessor.setValue('vikrant'); 

,這將導致在java中的「呼叫的setValue ()'和你的字段變量將被設置。

請注意,片段可能不準確,我已經從我的頭直接鍵入他們:)但你應該得到的原則。希望有所幫助。

+0

我做到了,但仍然無法訪問變量。這很奇怪。我甚至嘗試在任何函數之外設置該變量。我想要完成的是我想在我的android類中讀取一個javascript變量值。 – neha 2010-11-22 09:06:19

+0

非常感謝Konstantin Burov花時間解釋這一點。現在我明白了這一切。 – neha 2010-11-22 15:04:31

+0

不客氣:) – 2010-11-22 15:31:57