未捕获的referenceerror函数未定义javascript android

时间:2012-09-05 12:40:37

标签: javascript android

我尝试将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标签正确附加了脚本字符串。

我怎么能解决这个问题 谢谢....

3 个答案:

答案 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_COMPATIBILIT‌Y_MODE); }