Вопрос о внедрении JavaScript для Android WebView.loadDataWithBaseURL ()

#javascript #android #android-webview

#javascript #Android #android-webview

Вопрос:

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

У меня есть 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-код перед загрузкой его в webview. Ничего.

Я попытался добавить встроенный метод Javascript. Ничего.

Я попытался добавить метод Javascript после загрузки страницы…

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

Ответ №1:

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

 "file://"
  

Для

 "file:///"