Android Webview HTML加载Javascript问题

我一直在争论这个问题超过48小时,而我一直无法在网上找到答案。 这是设置:

我的Android应用程序在第一次运行时(内容超过20MB)下载内容,并将文件解压缩到用户的SD卡上/ mnt / sdcard / {my package} /文件夹中。 内容包括HTML文件,CSS文件,JS文件和图像。 以下是写入SD卡的完整结构(其中/ = / mnt / sdcard / {我的包} /文件夹/):

/内容/

a.html
b.html
images/
  image1.jpg

/ CSS /

c.css
d.css

/ JS /

e.js
f.js

这是我从SD卡加载html文件的代码:

    webView = (WebView) findViewById(R.id.pageBrowser);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new LinkHandlerInterface(), "Android");
    webView.setWebViewClient(new PageWebViewClient());

    // contentLocation + url is equal to the full path to the html file
    webView.loadUrl("file://" + contentLocation + url);

此代码成功加载HTML页面。 没问题。 每个页面都有以下头标签:

    <link rel="stylesheet" type="text/css" href="../css/screen.css" media="all" />
    <link rel="stylesheet" type="text/css" href="../css/inPractice.css" media="all" />
    <link rel="stylesheet" type="text/css" href="../css/inPracticeScheme.css" media="all" />
    <link rel="stylesheet" type="text/css" href="../css/mobile/iPad.css" media="all" />
    <script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="../js/inPractice-utilities.js"></script>
    <script type="text/javascript" src="../js/inPractice.js"></script>
    <script type="text/javascript" src="../js/mobile/inpractice.ipad.js"></script>

这是问题所在。 我的WebView呈现HTML就好了。 它甚至可以完美地加载和应用CSS。 但是,它拒绝加载和执行Javascript。 如果你从上面记得,js文件夹实际上是一个从html文件开始的文件,所以它指向了正确的位置。

以下是我所知道的一个列表:

  • 我正在使用的CSS正在正常应用,所以我知道这个问题不在文件位置。

  • 我之前使用过相同的代码,但是从我的应用程序的资产文件夹(文件:/// android_assets / ...)加载文件,并且完美运行。 由于内容太大,我无法将其与我的应用程序捆绑在一起,因此转移到了SD卡。

  • 如果我以一种脚本标记内列出的所有JavaScript方法来更改HTML文件,它就可以正常工作。 我无法控制HTML,因此我无法永久应用此更改。 这告诉我WebView没有执行Javascript的问题。

  • 图像加载正常。

  • 我现在刚刚摆脱想法。 有没有人有任何线索为什么我的WebView无法加载我的Javascript文件? 有没有人见过这个?

    编辑:这里是我试图使用的JS文件可以在这里查看:

    http://www.automatastudios.com/clients/cco/inpractice/css/inPractice.css http://www.automatastudios.com/clients/cco/inpractice/css/inPracticeScheme.css http://www.automatastudios。 com / clients / cco / inpractice / css / screen.css http://www.automatastudios.com/clients/cco/inpractice/css/mobile/iPad.css

  • 注意:这些CSS文件不是我自己创作的。

  • 永远无法找到解决方案。

    我最终只是编辑了HTML文件,例如将Javascript源文件更改为内嵌Javascript。 这有效(正如我预期的那样)。


    加载引用js,css的html的首选方法是使用

    webView.loadDataWithBaseURL()
    

    我们需要传递文件系统上的html,js,css所在位置的根目录作为baseURL。 这里需要注意的是,我们只需要使用“文件”方案URL。

    在你的情况下,代码应该是

        String html = readFileAsString(
           new FileInputStream("file://" + contentLocation + url) );
    webView.loadDataWithBaseURL("file://" + contentLocation,html,"text/html","utf-8",null);
    
    
    public static StringBuffer streamToString(InputStream stream ){
    
            StringBuffer fileContent = new StringBuffer("");
            try {
    
                int size = stream.available();
                byte[] buffer = new byte[size];
                int length;
                while ((length = stream.read(buffer)) != -1) {
                    fileContent.append(new String(buffer));
                }
                stream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                try {
                    stream.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
    
            return fileContent;
        }
    

    希望答案有助于未来的访问者

    PS:上面的代码片段没有编译

    链接地址: http://www.djcxy.com/p/5763.html

    上一篇: Android Webview HTML Loading Javascript Problem

    下一篇: How to use Native Activity? Can it be combined with traditional activity?