Я пытаюсь загрузить 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", "");
}
}
Проблема была в том, что я извлек эти веб файлы из папки приложений приложения phonegap; у них были некоторые дополнительные файлы с разной структурой. Вот почему он не работал в наивной среде Android!
На вашей странице html должна быть ссылка на
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js">
</script>
Поскольку вы говорите, что документы должны загружаться в автономном режиме, jquery js не загружается. Вероятно, вы можете связать jquery вместе с вашим приложением и локально ссылаться на него
<script src="file:///android_asset/js/jquery-1.8.2.min.js"></script>
Также включают
<script src="file:///android_asset/js/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 должны присутствовать в папке с вашими ресурсами.
Надеюсь это поможет.
htmlPage
над фрагментом кода?