Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何借助本地导入的js文件在webview中导航?_Android_Android Fragments_Android Webview_Android Json_Android Webservice - Fatal编程技术网

Android 如何借助本地导入的js文件在webview中导航?

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

我正在开发一个从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请求并搜索“$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();
    }