所提供的答案给出了错误,所以我决定做一个简单的实现也有特色的结构良好的JavaScript(JS的意思是在一个文件中):
在Assets文件夹中创建一个文件,下面的代码名为inject.js内部:
document.getElementsByTagName('form')[0].onsubmit = function() {
var objPWD, objAccount, objSave;
var str = '';
var inputs = document.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].name.toLowerCase() === 'username') {
objAccount = inputs[i];
} else if (inputs[i].name.toLowerCase() === 'password') {
objPWD = inputs[i];
} else if (inputs[i].name.toLowerCase() === 'rememberlogin') {
objSave = inputs[i];
}
}
if(objAccount != null) {
str += objAccount.value;
}
if(objPWD != null) {
str += ' , ' + objPWD.value;
}
if(objSave != null) {
str += ' , ' + objSave.value;
}
window.AndroidInterface.processHTML(str);
return true;
};
这是JavaScript代码,我们将使用注射,你可以切换出if语句,您认为合适而使用类型,而不是或名称。回调到Android是这一行:window.AndroidInterface.processHTML(str);
那么你的活动/片段应该是这样的:
public class MainActivity extends ActionBarActivity {
class JavaScriptInterface {
@JavascriptInterface
public void processHTML(String formData) {
Log.d("AWESOME_TAG", "form data: " + formData);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = new WebView(this);
this.setContentView(webView);
// enable javascript
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(), "AndroidInterface");
// catch events
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
try {
view.loadUrl("javascript:" + buildInjection());
} catch (IOException e) {
e.printStackTrace();
}
}
});
webView.loadUrl("http://someurl.com");
}
private String buildInjection() throws IOException {
StringBuilder buf = new StringBuilder();
InputStream inject = getAssets().open("inject.js");// file from assets
BufferedReader in = new BufferedReader(new InputStreamReader(inject, "UTF-8"));
String str;
while ((str = in.readLine()) != null) {
buf.append(str);
}
in.close();
return buf.toString();
}
其实,我可能已经找到了一种方法自己:这应该有可能注入一些JavaScript代码解析当用户提交表单时显示字段。所提供的Javascript到Java接口应该能够将填充的数据传回到Java空间进行进一步处理。 将尝试该方法并回报。当然,任何进一步的反馈仍然是欢迎的! – 2010-09-01 01:24:42