【问题标题】:How to store a string to file in android java code and call it for parsing in javascript如何将字符串存储到android java代码中的文件并调用它以在javascript中解析
【发布时间】:2013-12-02 17:42:35
【问题描述】:

我正在尝试实现一个 jQuery Mobile 应用程序,在该应用程序中我正在解析页面的 HTML 代码,以便使用 div-id(例如 main-content-inner)仅查找 div 的内容。我在 JavaScript 中这样做,它存储在我的 index.html 代码中,如下所示:

<script type="text/javascript">
    window.onload = function() {
        //    var chck = document.getElementById("check");
        //     alert(chck.title);    
        $.ajax({
            type: 'GET',
            url: 'main.html',
            dataType: 'html',
            success: function(data) {

                //cross platform xml object creation from w3schools
                try //Internet Explorer
                {
                    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                    xmlDoc.async = "false";
                    xmlDoc.loadXML(data);
                } catch (e) {
                    try // Firefox, Mozilla, Opera, etc.
                    {
                        parser = new DOMParser();
                        xmlDoc = parser.parseFromString(data, "text/xml");
                    } catch (e) {
                        alert(e.message);
                        return;
                    }
                }
                //    var chck = document.getElementById("check");
                //    alert(chck.title);
                var abc = document.getElementById("content1");
                abc.innerHTML = (xmlDoc.getElementById("main-content-inner").innerHTML);
                //    alert(abc.innerHTML);
            }
        });
</script>

由于 jQuery 无法调用远程页面的 HTML 代码(同源策略),我正在使用我在 Android 的 MainActivity.java 上实现的 java 语言代码,并且 HTML 代码作为字符串返回(比如 i) .

现在,我想将这个“i”(来自 java)传递给 javascript(在 index.html 中)进行解析。我可以使用什么方法来做到这一点。我也想过使用 FileWriter 将字符串存储在文件中,但我不知道如何在 javascript 中调用这个新文件的路径(在 JS 的 URL 中写什么)。

【问题讨论】:

    标签: java javascript android jquery html


    【解决方案1】:

    一种方法是使用Javascript interface,如下所示:

    class JavaScriptInterface {
    
                @JavascriptInterface
                public String getFileContents(){
                    // read the file into a String and return it here. 
                    return "the contents of your file";
                }
    
    }
    

    然后,在 webview 上设置 Javascript 接口:

    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new JavaScriptInterface(), "android");
    

    以及在webview里面页面的js中:

    function getFileContents(){
        var info = window.android.getFileContents();
        return info;
    }
    

    然而,这不是异步的。如果您想以异步方式实现此功能,您可以:

    • 在 javascript 中添加一个名为“populateFileContents(data)”的方法
    • 从javascript调用window.android.getFileContents()
    • 什么都不返回,只启动(可能是异步任务)读取文件内容的功能,然后在 Java android 代码中调用 webview.loadUrl("javascript:populateFileContents(data);"); - 这会将文件中的数据传递回 javascript,你可以用它做你喜欢的事情。

    【讨论】:

      【解决方案2】:

      感谢#nebulae 的回答。

      但是我通过某种挖掘解决了我的问题。我使用文件写入器创建了一个文件并将其存储在 Android 内部 SD 卡中的一个文件夹中(比如文件夹名称 ABC 文件名称 XYZ)。

      然后我使用该文件的绝对地址从我的 javascript 调用该文件。文件 ABC/XYZ 的绝对地址在我的 JS 中写为:

        url: 'file:///storage/sdcard0/ABC/XYZ.txt',
      

      这种方法可以解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        • 2014-08-05
        • 2014-10-12
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        相关资源
        最近更新 更多