我正在尝试将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", "");
}
}
答案 0 :(得分:1)
您的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>
您可能还需要使用loadDataWithBaseURL加载html页面,如下所示,而不是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文件应该出现在您的资源文件夹中。
希望这有帮助。
答案 1 :(得分:0)
问题是 - 我从phonegap应用程序的资产文件夹中提取了这些网络文件;那些有一些额外的文件和不同的结构。这就是为什么它不适用于Android天真的环境!