Android WebView.loadDataWithBaseURL () Вопрос о внедрении JavaScript - PullRequest
1 голос
/ 10 мая 2011

Я искал решение этой проблемы выше и ниже, и хотя я нашел один вопрос, я нашел ноль ответов.Я изложу всю ситуацию, потому что, возможно, есть решение, которого я не вижу ...

У меня есть файл 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» работал?Обратите внимание, я не могу изменить вызов на «контент», и веб-просмотр, который отображает содержание вспомогательного ресурса, находится в отдельном действии от исходного веб-просмотра.

1 Ответ

0 голосов
/ 10 июня 2012

Я полагаю, у вас есть опечатка. Изменение,

"file://"

до

"file:///"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...