当前位置: 首页 > 知识库问答 >
问题:

从本地资产加载时,jQuery Mobile在WebView中不工作

於乐
2023-03-14

我试图在我的Android应用程序中呈现一个使用jQueryMobile创建的页面,但我需要在webView中进行,处于脱机状态。

为此,我开始复制页面的index.html,并将所有所需的资产直接带到设备的内部存储中。然后,我在设备的内部浏览器和Chrome应用程序中输入文件:///sdcard/index.html加载了它,网站显示得很好,有jQuery样式和所有样式。

然后我进入我的应用程序,在那里我有一个webView,这就是我实际上需要呈现前面提到的页面的地方。我使用LoadDataWithBaseurl()加载页面(因为这是我最终需要做的),如下所示:

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

问题是,如果我在没有资产引用的情况下加载页面(只是通常调用loadurl),它会加载,但显然没有样式或功能。当我调用LoadDataWithBaseURL时,它确实正确地读取了资产引用,但是呈现被JQueryMobile的旋转轮卡住了,页面从未真正加载。这就是我所看到的:

所以总结一下:

>

  • 我使用jQuery Mobile创建了一个网站。它只是一个简单的带有jQuery样式的html页面。

    如果我用webview中的资产引用加载这个页面,它
    就不起作用了,它被旋转轮卡住了。连通性不影响问题。

    如果删除引用jQM样式表的行,则页面将在没有样式的情况下加载,但图像将正确加载(因此对资产的引用是正确的)

    请注意,纺车根本就不应该出现,因为我在jQM中完全禁用了AJAX,使用:

    <script>
    $.mobile.ajaxEnabled = false;
    </script>
    
        mWebView = (WebView) findViewById(R.id.webView);
        WebSettings s = mWebView.getSettings();
        s.setJavaScriptEnabled(true);
    

    有什么建议吗?

    pd.按要求发布index.html文件。这是最简单的例子,只是一个空索引。问题依然存在:

    <!doctype html>
    <html lang=es>
    <head>
    <meta charset="utf-8">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-touch-fullscreen" content="yes">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="format-detection" content="telephone=no" />
    <meta name="HandheldFriendly" content="true" />
    <meta name="MobileOptimized" content="320" />
    <head>
    <title>
        My title
    </title>
    
    <script>
    $.mobile.ajaxEnabled = false;
    </script>
    
    <script src="script/jquery/jquery-1.9.1.min.js"></script>
    <script src="script/jquery/jquery.mobile-1.3.2.min.js"></script>
    <link href="css/jquery.mobile-1.3.2.min.css" rel="stylesheet" media="screen" type="text/css"  />
    
    
    </head>
    
    <body>
    
    </body>
    </html>
    
  • 共有1个答案

    尉迟明辉
    2023-03-14

    自己解决了。从JellyBean开始,webView设置包括一个属性来禁止从文件资源加载,并且默认情况下是禁用的。

    在pre-Jelly设备上运行我的应用程序很好,但我使用的两个开发设备都是基于4.3的。

    如果有人感兴趣,我使用以下代码解决了它:

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
            s.setAllowUniversalAccessFromFileURLs(true);
            s.setAllowFileAccessFromFileURLs(true);
        }
    
     类似资料:
    • 我正试图将本地url加载到webview,但我不想使用assets文件夹,因为它是只读的,而且我需要从Web服务更新文件。 Web服务调用运行良好,并将html文件保存到设备上的文件夹中,使用 这将在应用程序的存储空间中创建一个文件夹'app_live',并用HTML填充该文件夹。 现在,当我把它加载到我的Webview中时,应用程序显示“网站不可用”,尽管livefolder.isdir()返回

    • 我有一个问题与WebView。我的应用程序在本地资产中内置了用html制作的帮助文件。我用WebView显示html文件。 null 我怀疑WebView没有处理本地文件的查看历史记录。我使用的是OS4.0.3。 有解决办法吗?

    • 我在我的android应用程序中有一个webview,加载的html文件在服务器上,但是我需要从应用程序的资产文件夹地址一些文件。我想问一下如何处理这些文件。 谢谢

    • 我有一个webview应用程序,可以从服务器加载资源(css、js、图像)。我希望它从应用程序的资产文件夹加载资源。我该怎么做?。 我尝试使用:

    • 我是初学者。我已经使用“反应本机运行Android”命令在Ubuntu上运行了反应本机项目。我在模拟器上收到错误“无法从资产“index.android.bundle”加载脚本。确保您的包包装正确,或者您正在运行包服务器。”

    • 在使用./gradlew assembledebug构建apk后,我得到了这个错误。如果我用./gradlew assembleRelease构建apk,我会在手机上安装应用程序时出现错误。当我用react-native run-android在虚拟设备中运行相同的应用程序时,应用程序运行良好,没有任何麻烦。有什么想法吗?