Я искал решение этой проблемы выше и ниже, и хотя я нашел один вопрос, я нашел ноль ответов.Я изложу всю ситуацию, потому что, возможно, есть решение, которого я не вижу ...
У меня есть файл HTML, загруженный на SD-карту пользователя.Я загружаю этот HTML-файл в WebView, используя WebView.loadURL (...).Это отлично работает.HTML импортирует внешние файлы Javascript следующим образом:
<script type='text/javascript' src='js/jquery-1.3.2.min.js' />
<script type='text/javascript' src='js/inPractice-utilities.js' />
<script type='text/javascript' src='js/inPractice.js' />
<script type='text/javascript' src='js/mobile/inpractice.ipad.js /'>
Конечно, это не работает, потому что после SDK 1.0 возможность загрузки этого внешнего кода считалась проблемой безопасности (или, по крайней мере, я так понял).Я изменил каждый HTML-файл (их сотни), чтобы использовать встроенный Javascript, и все отлично работает.
Каждый HTML-файл имеет ссылки, которые вызывают методы Javascript с использованием их события "onClick".
<a href="/drug" onclick="return content('drug', {name:'Tamoxifen', pageId:'9475b30a-5a8b-04fa-f975-7fcaeaa0a2cf'});">Tamoxifen</a>
Как видите, метод javascript «content» вызывается, когда пользователь нажимает на эту ссылку.Это также отлично работает.
Однако некоторые файлы имеют ссылки на «вспомогательные ресурсы», которые по сути являются отдельными HTML-страницами, за исключением самой страницы.Вот пример:
<a href="/supportingAsset" onclick="return content('supportingAsset', {'html':'<div class='supportingAsset'><p><a href='/drug' onclick='return content('drug', {name:'Tamoxifen', pageId:'9475b30a-5a8b-04fa-f975-7fcaeaa0a2cf'});'>Tamoxifen</a>'});">Supporting Asset</a>
* Обратите внимание, что в моем воссоздании могут быть некоторые проблемы с синтаксисом, но я обещаю, что синтаксис в реальном коде верен.
Итак, проблема здесьзаключается в том, что вспомогательный актив HTML включен в качестве параметра для вызова метода Javascript «content».Чтобы отобразить этот контент, когда пользователь нажимает на вспомогательный ресурс, я использую ...
webView.loadDataWithBaseURL("file://" + baseLocation, html, "text/html", "utf-8", null);
..., где "html" - это HTML-код, передаваемый в метод Javascript, "content".Эта новая страница отображается нормально, НО ... если вы заметили в содержании вспомогательного ресурса, есть ДРУГАЯ ссылка, которая вызывает метод Javascript, "content".Вот в чем проблема ...
Я пытался добавить ...
<script type='text/javascript' src='js/jquery-1.3.2.min.js' />
... в необработанный HTML перед загрузкой его в веб-просмотр.Ничего.
Я пытался добавить встроенный метод Javascript.Ничего.
Я пытался добавить метод Javascript после pageLoad ...
@Override
public void onPageFinished(WebView view, String url) {
if (loadingPageDialog != null) {
loadingPageDialog.dismiss();
}
view.loadUrl("javascript:(function content(path, params) { " +
"document.getElementsByTagName('body')[0].style.color = 'red'; " +
"})()");
}
... Ничего.
Актуальный вопрос
Кто-нибудь знает, как я могу внедрить Javascript-метод «content», чтобы существующий вызов «content» работал?Обратите внимание, я не могу изменить вызов на «контент», и веб-просмотр, который отображает содержание вспомогательного ресурса, находится в отдельном действии от исходного веб-просмотра.