Created
June 27, 2014 01:08
-
-
Save up1/95f5ee71071557973986 to your computer and use it in GitHub Desktop.
ตัวอย่างการส่งข้อมูลจาก WebView กลับมายัง Native ผ่าน JavaScript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyBrowser extends Activity { | |
private final String jsInjectCode = | |
"function parseForm(event) {" + | |
" var form = this;" + | |
" // make sure form points to the surrounding form object if a custom button was used | |
" if (this.tagName.toLowerCase() != 'form')" + | |
" form = this.form;" + | |
" var data = '';" + | |
" if (!form.method) form.method = 'get';" + | |
" data += 'method=' + form.method;" + | |
" data += '&action=' + form.action;" + | |
" var inputs = document.forms[0].getElementsByTagName('input');" + | |
" for (var i = 0; i < inputs.length; i++) {" + | |
" var field = inputs[i];" + | |
" if (field.type != 'submit' && field.type != 'reset' && field.type != 'button')" + | |
" data += '&' + field.name + '=' + field.value;" + | |
" }" + | |
" window.HTMLOUT.processFormData(data);" + | |
"}" + | |
"" + | |
"for (var form_idx = 0; form_idx < document.forms.length; ++form_idx)" + | |
" document.forms[form_idx].addEventListener('submit', parseForm, false);" + | |
"var inputs = document.getElementsByTagName('input');" + | |
"for (var i = 0; i < inputs.length; i++) {" + | |
" if (inputs[i].getAttribute('type') == 'button')" + | |
" inputs[i].addEventListener('click', parseForm, false);" + | |
"}" + | |
""; | |
class JavaScriptInterface { | |
public void processFormData(String formData) { | |
<do whatever you need to do with the form data> | |
} | |
} | |
onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.browser); | |
WebView browser = (WebView)findViewById(R.id.browser_window); | |
browser.getSettings().setJavaScriptEnabled(true); | |
browser.addJavascriptInterface(new FormDataInterface(), "FORMOUT"); | |
browser.setWebViewClient(new WebViewClient() { | |
@Override | |
public boolean shouldOverrideUrlLoading(WebView view, String url) { | |
view.loadUrl(url); | |
return true; | |
} | |
@Override | |
public void onPageFinished(WebView view, String url) { | |
view.loadUrl("javascript:(function() { " + | |
MyBrowser.jsFormInjectCode + "})()"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment