【问题标题】:Not able to run javascript for webview in android无法在android中为webview运行javascript
【发布时间】:2015-03-17 07:00:14
【问题描述】:

我有 html 字符串,我正在将其加载到 webview 中。请记住 html 不是文件,它只是一个字符串。 例如,如果我们将我的 html 字符串设为,

String html = "<html>
   <head>
   <title>business card template-2</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  </head>
 <body>
    <div id="name_text"><font face="verdana" color="#525405">Name</font></div>
   <div id="mobile"><font face="verdana" color="#525405">Mobile</font></div>
 </body>
</html>"

我正在将这个 html 字符串加载到 webView 中。

我正在使用脚本文件动态替换字体标签下的名称,即在上面的html字符串中,我想用实际名称替换名称的地方,甚至用实际数字代替移动。

所以我已将脚本附加到上面的 html 字符串中,这应该可以完成所有替换工作。

例如,我连接到 html 字符串的脚本是,

<script type='text/javascript'>var name_text='Rupesh';" var tel_no='XXX-XXX-XX'; </script>
<script type='text/javascript' src='file:///android_asset/js_files/jquery.js'></script>
<script type='text/javascript' src='file:///android_asset/js_files/template.js'></script>

我保存在 assets-&gt;js_files 文件夹下的 template.js 和 jquery.js 文件因此尝试通过提供路径 file:///android_asset/js_files/template.js 来访问

在 template.js 中我正在做那个替换。

当我通过提供这两个 .js 文件的路径在 pc 浏览器中执行此操作时,这可以正常工作。但在安卓手机中我无法加载它。是否有任何替代方法可以进行此替换。

我以编程方式将连接的字符串加载到webview 也就是说,

String html_script = html+script;
webViewCard.getSettings().setJavaScriptEnabled(true);
webViewCard.loadData(html_script,"text/html", "UTF-8");

谁能帮帮我。

更新:

我已经找到了解决方案,但由于一些限制,我对此并不十分满意。下面是解决方案,

我添加了以下代码行

WebSettings settings = webViewCard.getSettings();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
settings.setAllowUniversalAccessFromFileURLs(true);
settings.setAllowFileAccessFromFileURLs(true);
 }

但问题是我必须将我的应用程序限制为仅适用于 4.2 及更高版本的用户。 有什么我可以做的吗?

【问题讨论】:

  • 你有没有 webview.getSettings().setJavaScriptEnabled(true);在你的代码中?
  • 是的,你可以在上面看到它。我刚刚编辑了问题。

标签: javascript android jquery webview android-webview


【解决方案1】:

1.如果您的手机/模拟器在 Gingerbread 上运行

我自己也遇到过类似的问题。我正在使用 2.3 Gingerbread(API 10) 模拟器来测试我的应用程序。我在android forum 上了解了更多信息。

2.如果您的手机/模拟器在 4.2 Jellybeans 上运行

来自 Android 4.2 文档:

注意:如果您将 targetSdkVersion 设置为 17 或更高,则必须 将 @JavascriptInterface 注释添加到您想要的任何方法 提供您的网页代码(该方法也必须是公开的)。如果你 不提供注释,则该方法将无法访问 在 Android 4.2 或更高版本上运行时的网页。

【讨论】:

  • 我应该在哪里添加注释??
  • 通过this
  • 就我而言,我没有从脚本调用任何方法。我只是在脚本标签中加载另一个 javascript 文件(template.js)。那么如何添加接口。
  • 没有。它只是显示 html 但我认为脚本没有执行。如果脚本运行,则所有占位符都应替换为值。
  • webViewCard.loadDataWithBaseURL(null, html_script, "text/html", "UTF-8", null);
猜你喜欢
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多