1

我尝试将html页面加载到自定义webView,我还需要将4个javascript文件加载到webView,当我将javascript引用直接放在html的head标签中时,它们运行良好,但是当我在运行时从我的android加载它们时函数,它们正确加载,但不工作并捕获“未定义未捕获的引用错误函数”异常。

这是我在两种状态下所做的:

状态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:从webview客户端的android应用程序加载,,,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);

此打印控制台消息“未捕获的参考错误:未定义范围”,尽管 head 标记正确附加了脚本字符串。

我该如何解决这个问题,谢谢......

4

3 回答 3

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');
  }
});

您将拥有更少的代码,因此连接字符串中的错误可能更少。

可用的回调可能有助于发现错误或添加有用的功能。

于 2012-09-05T12:54:51.060 回答
0

您在两个示例中以不同的顺序加载文件!

加载脚本文件的顺序很重要。我猜你有依赖关系,无法解决。

于 2012-09-05T12:59:01.733 回答
0

试试看:- 如果应用程序以 LOLLIPOP 或更高版本为目标,则默认 Web 视图行为是完全拒绝混合内容。由于移动连接需要在标头丰富期间使用 HTTP,因此我们需要更宽松的安全设置。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_‌CONTENT_COMPATIBILIT‌Y_MODE); }

于 2017-11-09T06:52:37.707 回答