私は、ページの読み込みが完了した後、私はJavaScriptを注入していWebViewのを持って次のように(onpagefinished): page.js:android webviewでurlパラメータを解析する方法は?
if (window.page) {
return; // page has been loaded from somewhere, not to redefine it again
}
var _$p = window.page = {
version: "0.1"
};
function Response(xhr) {
this.xhr = xhr;
this.status = xhr.status;
}
Response.prototype.getHeader = function(header) {
return this.xhr.getResponseHeader(header);
};
Response.prototype.getBody = function() {
return this.xhr.responseText;
};
function ajax(url, callback) {
//TODO support PUT method
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.onerror = function(e) {
callback.onerror(e);
};
xhr.onreadystatechange = function(event) {
if (this.readyState != this.DONE || this.status == 0) {
return;
}
if (this.status != 200) {
var response = new Response(xhr);
callback.onfail(response);
return;
}
callback.onsuccess(this.responseText);
};
xhr.send();
};
var rpc = {
type: ["SMALL", "LARGE"],
exec: function(call, type) {// "call" conform to JSON-RPC 2.0
//TODO differentiate POST/GET based on rpc.type.SMALL/LARGE
var param = encodeURIComponent(JSON.stringify(call));
ajax("?_$p=" + param, {
onerror: function(e) {
//TODO use logging
alert("Error:"+e.toString());
},
onfail: function(response) {
//TODO use logging
alert("Failed:"+response.getBoby());
},
onsuccess: function(text) {
//TODO use logging
alert("Page success:"+text);
},
});
}
};
_$p.navigate = function(url, title) {
rpc.exec(// JSON-RPC 2.0
{method: "navigate", params: {
"url": url,
"title": title
}}, rpc.type.SMALL);
};
が
@Override
public void onPageFinished(WebView view, String url) {
String jscontent = "";
try{
AssetManager manager = view.getContext().getAssets();
InputStream is = manager.open("page.js");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
jscontent += line;
}
is.close();
}
view.loadUrl("javascript:" + jscontent);
}
これは私が読んでいるjavascriptのページですjavascriptのnavigate関数のurlパラメータのjson値を解析するにはどうすればよいですか? jsonの例:{"method": "navigate"、 "params":{"url": "http://some.url"、 "title": "Some Url"}}。 また、webviewのshouldinterceptrequestメソッドで行うのが理想でしょうか?
ありがとうございます!
申し訳ありませんが、私は本当にあなたがURLのjsonの価値を意味するものの下で、あなたが説明して気にしませんか? – sihao
私のjavascriptで、あなたはjson:$ p.navigateを見ますか?そこからurlとtitleの値を取得して、それをローカルのネイティブ変数に渡したいと思います。 –
rpcの仕組みについてはあまりよく分かりません。変数を取り出そうとしているだけなら、私の答えを試すことができます。 – sihao