当从资源文件夹加载时,Javascript在webView中不起作用,但是从http服务器和本地主机

时间:2013-09-24 17:11:04

标签: javascript android jquery webview

我正在尝试将offline version of python documentation加载到webview asset文件夹中。脱机文档在我的电脑网络浏览器中完全可以脱机使用,但在webviewjquery is missing)中无法正常工作。

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView webView = (WebView) findViewById(R.id.wrapper);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        webView.loadUrl("file:///android_asset/python/index.html");
    }

}

当我尝试加载主页或导航到任何页面时,会显示此错误消息。

09-24 01:03:02.789: E/Web Console(479): ReferenceError: Can't find variable: $ at file:///android_asset/python/index.html:164

上面的错误是针对Jquery代码片段的(我认为这是因为jquery库没有加载)

<script type="text/javascript">$('#searchbox').show(0);</script>

但是当我从本地服务器localhosthttp服务器加载这些页面时,这是完美的。我错过了什么?

修改 webView中没有显示任何内容。使用loadDataWithBaseURL后:

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView webView = (WebView) findViewById(R.id.wrapper);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        AssetManager assetManager = getAssets();
        String htmlPage = null;
        InputStream input;
        try {
            input = assetManager.open("python/index.html");

            int size = input.available();
            byte[] buffer = new byte[size];
            input.read(buffer);
            input.close();
            // byte buffer into a string
            htmlPage = new String(buffer);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            webView.loadDataWithBaseURL("file:///android_asset/", htmlPage, "text/html", "utf-8", "");

    }
}

2 个答案:

答案 0 :(得分:1)

您的html页面应该引用

<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js">
</script>

由于您说文档应该脱机加载,因此未加载jquery js。您可以将jquery与您的应用程序捆绑在一起,并像本地

一样在本地引用它
  <script src="file:///android_asset/js/jquery-1.8.2.min.js"></script>

还包括

<script src="file:///android_asset/js/jquery.mobile-1.3.2.min.js"></script>

您可能还需要使用loadDataWithBaseURL加载html页面,如下所示,而不是loadUrl。

 AssetManager assetManager = getAssets();
            String htmlPage=null;
            InputStream input;
            try {
                input = assetManager.open("python/index.html");

                int size = input.available();
                byte[] buffer = new byte[size];
                input.read(buffer);
                input.close();
                // byte buffer into a string
                htmlPage = new String(buffer);

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   
webView.loadDataWithBaseURL("file:///android_asset/", htmlPage, "text/html", "utf-8", "");

注意: jquery-1.8.2.min.js和jquery.mobile-1.3.2.min.js文件应该出现在您的资源文件夹中。

希望这有帮助。

答案 1 :(得分:0)

问题是 - 我从phonegap应用程序的资产文件夹中提取了这些网络文件;那些有一些额外的文件和不同的结构。这就是为什么它不适用于Android天真的环境!