安卓WebView无法加载jQuery

16

我正在制作一个 Web 应用程序,并使用 jQuery。

我已经创建了一个简单的 Android 应用程序,并在其中使用了 WebView。我加载了我的 URL:www.mydomain.com。

在 mydomain.com 上,我有:

<script src="js/jquery_1.4.2_min.js"></script> 

<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
 alert("Hii!!!!");
});
</script>

如果我在浏览器中访问mydomain,警告框会正常显示。但是,如果我从我的原生应用程序访问它,则不会显示。我该怎么办?


1
是的,它已经加载了。我编辑了代码。在浏览器中它运行良好,但从应用程序中不起作用。 - Klian
什么是Web应用程序?例如mobile.mydomain.com? - Phil
如果您不使用jQuery,只是使用普通的alert,它是否有效? - Naftali
Neal,我用一个简单的代码尝试:<script type="text/javascript" charset="utf-8"> alert("juas"); </script>,但它不起作用... - Klian
我刚刚在 browser.setWebViewClient 之前加入了 browser.getSettings().setJavaScriptEnabled(true);,现在它可以工作了... :) 谢谢! - Klian
@Klian:你有什么解决方案吗?我也遇到了同样的问题。 - Mehul Kabaria
8个回答

19

你的 webview 是否启用了 JavaScript?

WebView.getSettings().setJavaScriptEnabled(true);

`browser = new WebView(this);browser.setWebViewClient(new WebViewClient() { .....setContentView(browser);browser.getSettings().setJavaScriptEnabled(true); browser.loadUrl("http://mydomain.com");` - Klian

7

虽然这个问题比较老,但我要说一下我的看法。

Javascript 警告框在 webview 中是可以工作的,不过你需要先设置 Web Chrome 客户端。

webView.setWebChromeClient(new WebChromeClient())

谢谢。这对我来说是最好的答案。 - Osama

5
我不是Android本地开发的专家,但我们刚刚开发了一个使用基于jQuery的网站在webview中的应用程序。您需要在活动类中设置setJavaScriptEnabled(true),然后jQuery就能正常运行。但是,您的示例alert('Hi')将不起作用,因为Android webview默认不支持警报。可以通过一些搜索来启用它...http://lexandera.com/2009/01/adding-alert-support-to-a-webview/ 或者,我们添加了一个自定义showAlert js函数来显示漂亮的用户通知。

3
您可能需要以下两个东西:
webSettings.setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());

3

你的js/jquery_1.4.2_min.js脚本文件放在哪里?如果它在你的资产目录中,那么你应该初始化webView并将资产目录作为baseUrl:

webView.loadDataWithBaseURL("file:///android_asset/", data, "text/html", "UTF-8", null);

或者

webView.loadUrl("file:///android_asset/file.html");

您可以尝试创建一个简单的 .js 文件,其中包含一个简单的函数,如下:
function dummy(document) { document.write("Hooray it works"); }

尝试访问您的HTML中的虚拟函数以测试是否已包含.js文件。


0
试试这个:创建一个主活动。
       import android.app.Activity;
       import android.os.Bundle;
       import android.webkit.WebView;
        import android.webkit.WebViewClient;

      public class MainActivity extends Activity {
       private WebView webView;
        private JavaScriptInterFace javaScriptInterFace;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView=(WebView)findViewById(R.id.webView);
    javaScriptInterFace=new JavaScriptInterFace(this);
    webView.addJavascriptInterface(javaScriptInterFace, "AndroidFunction");
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.loadUrl("file:///android_asset/test.html");
    webView.setWebViewClient(new WebViewClient());

   }



      }

创建另一个名为JavaScriptInterFace的Java文件

    import android.content.Context;
    import android.util.Log;
      import android.widget.Toast;

        public class JavaScriptInterFace {
 Context mContext;

 JavaScriptInterFace(Context c) {
     mContext = c;
             }

 public int changeImage(){
    Log.e("Got", "it"+2); 
     return 2;
 }

 public void showToast(){
     Toast.makeText(mContext, "hi", Toast.LENGTH_SHORT).show();
 }

     }  

创建一个HTML文件,将其放置在项目的资源文件夹中

     <!DOCTYPE html>
       <html>
         <head>
            <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width; user-scalable=0;" />
       <title>My HTML</title>
      </head>
        <body>
         <p id="mytext">Hello!</p>
             <img alt="show" src="ic_left_arrow.png" id="myImage"/>
           </br>
           <input type="button" value="Change" onClick="changeImage()" />
           <input type="button" value="Show tost" onClick="showToast()" />

           <script language="javascript">
             function changeImage() {
               i=AndroidFunction.changeImage();
            if(i===2){
           document.getElementById('mytext').innerHTML = i;
           document.getElementById('myImage').src="ic_right_arrow.png";
        }
           }
          function showToast() {
              AndroidFunction.showToast();
          }

         </script>

           </body>
            </html>

将所需的图像与上述HTML文件一起放入项目的资产文件夹中。

0

0

正确的顺序-

webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("file:///android_asset/xxx.html");

不要像下面这样错误地放置您的调用顺序

webview.loadUrl("file:///android_asset/xxx.html"); webview.getSettings().setJavaScriptEnabled(true);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接