Android 如何借助本地导入的js文件在webview中导航?
我正在开发一个从Web服务器调用url的Web视图,例如url=Android 如何借助本地导入的js文件在webview中导航?,android,android-fragments,android-webview,android-json,android-webservice,Android,Android Fragments,Android Webview,Android Json,Android Webservice,我正在开发一个从Web服务器调用url的Web视图,例如url=abc.com/thispage 这是一个http:link 现在,在这个页面中,我正在进一步导航到另一个页面,比如“mainpage”,我想导入一个我编写的本地js文件,以便: 步骤: 1) 我将myjspage.js文件导入项目(在资产中完成) 2) 将“\u$page\u on=1”参数附加到请求的url 3) 从myjspage.js文件读取数据,并在页面加载后注入webcontrol 4) 在webview控件内拦截url
abc.com/thispage
这是一个http:link
现在,在这个页面中,我正在进一步导航到另一个页面,比如“mainpage”,我想导入一个我编写的本地js文件,以便:
步骤:
1) 我将myjspage.js文件导入项目(在资产中完成)
2) 将“\u$page\u on=1”参数附加到请求的url
3) 从myjspage.js文件读取数据,并在页面加载后注入webcontrol
4) 在webview控件内拦截url请求并搜索“$page”url参数
5)为下一组指令解析参数的json值。json:{“方法”:“导航”,“参数”:{“url”:http://some.url“,”标题“:“一些Url”}}.l
我已经完成了步骤1至4:如下所示:
1) 按预期在资产中导入js文件
(二)
3) 在my webview的onpagefinished中:
@Override
public void onPageFinished(WebView view, String url) {
String jscontent = "";
try{
AssetManager manager = view.getContext().getAssets();
InputStream is = manager.open("myjspage.js");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while (( line = br.readLine()) != null) {
jscontent += line;
}
is.close();
}
catch(Exception e){}
view.loadUrl("javascript:(" + jscontent + ")()");
}
4) 在
5) 其中getData()是:
对于第五步,我不确定我所做的是否正确。事实上,我不确定我是否也遗漏了步骤2-4中的某些内容。基于这样一个事实,我应该能够在单击webview的“mainpage”部分中已识别的行时导航以调用本机片段。是否有人在webview中处理过关于js的本地操作和json解析,并能提供一些线索?会很有帮助的,谢谢 您的getData方法看起来非常奇怪—从未调用Http请求,也从未实际使用解析过的json。可以更详细地解释你期望发生什么。我不再使用它了,它只是为了测试。我只需要在“导航”函数下从javascript中检索json“url”参数。因此,我可以将其传递给本地java变量。此外,当我通过inputstream缓冲区读取javascript时,我无法读取javascript。我怎么读呢?只有当我在代码本身中硬编码它时,它才起作用。是否有什么东西可以抵消可能阻碍这一点的标签和新线?
@Override
public void onPageFinished(WebView view, String url) {
String jscontent = "";
try{
AssetManager manager = view.getContext().getAssets();
InputStream is = manager.open("myjspage.js");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while (( line = br.readLine()) != null) {
jscontent += line;
}
is.close();
}
catch(Exception e){}
view.loadUrl("javascript:(" + jscontent + ")()");
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if(url.contains("_$page")){
getData();
}
}
public void getData()
{
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpGet request = new HttpGet(getUrl());
JSONObject jsonObject;
String jsonString = "{\"json\":{\"method\":\"navigate\",\"params\":[{\"url\":\"mypage://realpage/data=CompanyData/its=goog.o"},{\"title\":\"Company name\"}]}}";
try
{
jsonObject = new JSONObject(jsonString);
JSONObject itemObject = jsonObject.getJSONObject("json");
String jsonName = "method: " +itemObject.getString("method");
JSONArray urlarray = itemObject.getJSONArray("params");
}catch(Exception e)
{
e.printStackTrace();
}
httpclient.getConnectionManager().shutdown();
}