我尝试将html页面加载到自定义webView 我还需要将4个javascript文件加载到webView, 当我将javascript引用直接放在html的head标签中时,它们运行良好, 但是当我在运行时从我的android函数加载它们时,它们正确加载,但是没有工作并且捕获“未被捕获的referenceerror函数未定义”异常。
这是我在两个状态下做的事情:
状态1:直接加载参考:
这完美地运作.....
<html>
<head>
<head>
<script type="text/javascript" src="file:///android_asset/selection/android.selection.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/jquery.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/rangy-core.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/rangy-serializer.js"></script>
</head>
<body>
......
</body>
</html>
状态2:从Android应用程序加载 在webview客户端,,, onPageFinished方法我把这段代码:
String str = "javascript: (function() { "
+ " var rangycore=document.createElement('script');"
+ " rangycore.type='text/javascript';"
+ " rangycore.src='file:///android_asset/selection/rangy-core.js';"
+"document.getElementsByTagName('head').item(0).appendChild(rangycore);"
+ " var rangyserializer=document.createElement('script');"
+ " rangyserializer.type='text/javascript';"
+ " rangyserializer.src='file:///android_asset/selection/rangy-serializer.js';"
+ " document.getElementsByTagName('head').item(0).appendChild(rangyserializer);"
+ " var select=document.createElement('script');"
+ " select.type='text/javascript';"
+ " select.src='file:///android_asset/selection/android.selection.js';"
+ " document.getElementsByTagName('head').item(0).appendChild(select);"
+ " var jquery=document.createElement('script');"
+ " jquery.type='text/javascript';"
+ " jquery.src='file:///android_asset/selection/jquery.js';"
+ " document.getElementsByTagName('head').item(0).appendChild(jquery);})()";
BTWebView.this.loadUrl(str);
此打印控制台消息“未捕获的referenceerror:rangy未定义” 虽然head标签正确附加了脚本字符串。
我怎么能解决这个问题 谢谢....
答案 0 :(得分:0)
在运行时加载JavaScript的简单而优雅的方法ist yepnope,一个1.7 KB的小型库。
yepnope({
load: [
"file:///android_asset/selection/android.selection.js",
"file:///android_asset/selection/jquery.js",
"file:///android_asset/selection/rangy-core.js",
"file:///android_asset/selection/rangy-serializer.js"
],
complete: function () {
alert('loaded successfully');
}
});
你的代码字符串中的代码更少,因此可能会有更少的错误。
可用的回调可能有助于发现错误或添加有用的功能。
答案 1 :(得分:0)
您在两个示例中以不同的顺序加载文件!
加载脚本文件的顺序很重要。我猜你有依赖关系,无法解决。
答案 2 :(得分:0)
尝试: - 如果应用程序以LOLLIPOP或更高版本为目标,则默认的Web视图行为是完全拒绝混合内容。由于移动连接需要在标头丰富期间使用HTTP,因此我们需要更轻松的安全设置。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); }