Я боролся с этой проблемой уже более 48 часов, и мне не удалось найти ответ нигде в сети. Вот настройки:
Мое приложение Android загружает контент при первом запуске (объем превышает 20 МБ), и файлы распаковываются на 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
Вот мой код, который загружает HTML-файл с SD-карты:
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 применяется нормально, поэтому я знаю, что проблема не в расположении файла.
Я использовал этот код раньше, но загружал файлы из папки ресурсов моего приложения (file: /// android_assets / ...), и он работал отлично. Поскольку содержимое настолько велико, я не могу связать его с моим приложением, поэтому перехожу на SD-карту.
Если я изменю файлы HTML таким образом, чтобы все методы Javascript были перечислены в теге сценария, он работает нормально. У меня нет контроля над 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-файлы не были созданы мной.