Javascript не работает в webView при загрузке из папки ресурсов, но работает как с http-сервера, так и с локального хоста

0

Я пытаюсь загрузить offline version of python documentation в webview из asset папки. Офлайновые документы отлично работают в моем веб-браузере в автономном режиме, но не работают должным образом в webview (что-то вроде jquery 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>

Но когда я загружаю эти страницы с локального сервера localhost или http сервера, это работает отлично. Что я упустил?

Редактировать Показывать ничего в 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", "");

    }
}
Теги:
webview

2 ответа

0
Лучший ответ

Проблема была в том, что я извлек эти веб файлы из папки приложений приложения phonegap; у них были некоторые дополнительные файлы с разной структурой. Вот почему он не работал в наивной среде Android!

1

На вашей странице html должна быть ссылка на

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

Поскольку вы говорите, что документы должны загружаться в автономном режиме, jquery js не загружается. Вероятно, вы можете связать jquery вместе с вашим приложением и локально ссылаться на него

  <script src="/jquery-1.8.2.min.js"></script>

Также включают

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

Вам также может потребоваться загрузить вашу страницу html с помощью loadDataWithBaseURL, как показано ниже, вместо 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 должны присутствовать в папке с вашими ресурсами.

Надеюсь это поможет.

  • 0
    Спасибо за Ваш ответ! Я собираюсь дать ему попытку. что такое htmlPage над фрагментом кода?
  • 0
    htmlPage - это фактическая HTML-страница, которая должна быть загружена. loadDataWithBaseURL требует, чтобы HTML-страница была представлена в виде строки. Я изменил свой код, чтобы включить это. Надеюсь, это поможет.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню