Skip to content

Instantly share code, notes, and snippets.

@Kane-Shih
Last active December 20, 2015 11:29
Show Gist options
  • Save Kane-Shih/6123744 to your computer and use it in GitHub Desktop.
Save Kane-Shih/6123744 to your computer and use it in GitHub Desktop.
deprecated use WebView's loadUrl() with a file URI, then the Javascript will be able to cross domain.
<html>
<head>
<script type="text/javascript">
// to simulate Android WebView... which exposes itself as "Android" here by addJavascriptInterface()
var Android = {
Log: function(msg) {
document.getElementById("log").innerHTML += "Log(" + msg + ")<br/>";
},
doHttpGet: function(url, requestCode) {
document.getElementById("log").innerHTML += "Android.doHttpGet(" + url + ", " + requestCode + ")<br/>";
if(requestCode === "step one") {
data = "fake-data-one";
} else if (requestCode === "step two"){
data = "fake-data-two";
}
onHttpGetDone(requestCode, data);
},
onJsParseDone: function(result) {
document.getElementById("log").innerHTML += "onJsParseDone(" + result + ")";
}
};
Android.Log("JAVASCRIPT LOADING START");
// request by Android
function parse(url) {
Android.Log("parse: " + url);
// ask Android to do HTTP GET in order to avoid NETWORK_ERR: XMLHttpRequest Exception 101
Android.doHttpGet(url, "step one");
}
Android.Log("function loaded: parse()");
// Android send the HTTP GET result
function onHttpGetDone(requestCode, data) {
Android.Log("onHttpGetDone - " + requestCode + ", " + data);
if(requestCode === "step one") {
Android.Log("do for step one");
parseForStepOne(data);
} else if (requestCode === "step two") {
Android.Log("do for step two");
parseForStepTwo(data);
} else {
Android.Log("unknown request code");
}
}
Android.Log("function loaded: onHttpGetDone()");
function parseForStepOne(data) {
Android.Log("parseForStepOne - data:" + data);
// parsing... find next thing we want to HTTP GET
Android.doHttpGet("http://url_for_2", "step two");
}
Android.Log("function loaded: parseForStepOne()");
function parseForStepTwo(data) {
Android.Log("parseForStepTwo - data:" + data);
// parsing.. if no more HTTP GET is needed and we find the answer
result = "result_for_" + data;
Android.onJsParseDone(result);
// else, we failed
//Android.onJsParseFailed(result);
}
Android.Log("function loaded: parseForStepTwo()");
Android.Log("JAVASCRIPT LOADING END");
</script>
</head>
<body onload="parse('http://url_for_1');">
<div id="log">
</div>
<div id="data_block">---end---<br/></div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment