javascript - 如何将 Css/JQuery 文件应用到 Android WebView 中的外部页面

标签 javascript android jquery css asp.net-mvc-4

不确定我的想法是否可行,但为什么是现在。

我有一个 MVC4 母版页如下

<head runat="server">
    <meta charset="utf-8" />
    <title>RYTE HCMS</title>
    <meta name="viewport" content="width=device-width" />
    <link href="<%: Url.Content("~/favicon.ico") %>" rel="shortcut icon" type="image/x-icon" />
    <link rel="stylesheet" href="~/Content/jquery/jquery.mobile.theme-1.4.3.min.css" />
    <link rel="stylesheet" href="~/Content/jquery/jquery.mobile.icons.min.css" />
    <link href="~/Content/jquery-ui.datepicker.min.css" rel="stylesheet" />
    <link href="~/Content/jquery.mobile.structure-1.4.5.min.css" rel="stylesheet" />
    <%: Scripts.Render("~/bundles/modernizr") %>
    <style type="text/css">
        .wrap {
            white-space: normal !important;
        }
    </style>
</head>
<body>
    <div data-role="page" data-theme="a" data-url="master-page" id="master-page">
        <div data-role="header" data-position="fixed">
            <asp:ContentPlaceHolder ID="Header" runat="server">
                <a href="#leftpanel" data-panelid="leftpanel" data-icon="bars" data-role="link" style="height: 17px"></a>
                <h1>
                    <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
                </h1>
                <% Html.RenderPartial("LoginUserControl"); %>
            </asp:ContentPlaceHolder>
        </div>
        <div data-role="content">
            <asp:ContentPlaceHolder ID="MainContent" runat="server" />
        </div>
    </div>
    <script src="<%=Url.Content("~/Scripts/jquery-1.11.1.min.js")%>"></script>
    <script>
        $(document).on("mobileinit", function () {
            $.mobile.ajaxEnabled = false;
        });
    </script>
    <script src="<%=Url.Content("~/Scripts/jquery.mobile-1.4.5.min.js")%>"></script>
    <script type="text/javascript">
        $(document).on("pageinit", "#master-page", function () {
            $(document).on("swipeleft swiperight", "#master-page", function (e) {
                // We check if there is no open panel on the page because otherwise
                // a swipe to close the left panel would also open the right panel (and v.v.).
                // We do this by checking the data that the framework stores on the page element (panel: open).
                if ($.mobile.activePage.jqmData("panel") !== "open") {
                    if (e.type === "swipeleft") {
                        $("#right-panel").panel("open");
                    } else if (e.type === "swiperight") {
                        $("#leftpanel").panel("open");
                    }
                }
            });
        });
    </script>
    <asp:ContentPlaceHolder ID="ScriptsSection" runat="server" />
</body>

我想在 Android WebView 中加载和应用 CSS/JQuery。我想将文件保留在 android 移动应用程序中,并在页面加载到 webView 时应用它们。

如果我不按特定顺序加载这些文件,设计就会中断。我这样做的原因是为了确保用户不会觉得它是一个网络应用程序。目前在每次刷新/重新加载时,jquery mobile 和 css 加载大约需要 1-2 秒。

既然MVC4页面是在远程服务器上编译的,有可能吗?

最佳答案

好的,所以对您问题的评论基本上总结了它。您需要将 js/css 代码添加到您的 Assets 文件中。

如果想看例子的话,可以看看这个sample project(我只加载js代码,css也是一样的原理) here

回顾一下总体思路:

  • 让您的 webview 使用自定义 WebViewClient(在示例中称为 MailWebViewClient)。您不需要自定义 webview(如示例中所做的那样)wv.setWebViewClient(webViewClient);
  • 在您的 webview 客户端中,覆盖 onPageFinished() 方法并在字符串 (src) 中加载您的 javascript 代码 view.loadUrl("javascript: "+ src);
  • 就是这样。它应该工作正常

    在示例中,我正在加载一个脚本,该脚本将调整所有表格和图像的大小以适应 web View (Android 的常见要求)。还有一些随意的 linkify 代码(用于识别和标记链接)。我不会使用 js 代码,因为它有点错误,但它是原理的一个很好的例子。

    关于javascript - 如何将 Css/JQuery 文件应用到 Android WebView 中的外部页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27356447/

    相关文章:

    javascript - google maps api 将 LatLng 添加到折线的开头

    javascript - 插入数组控制台日志可以看到但不会在 html 中呈现,为什么? Angular JS

    javascript - Yii2:从 gridView 复选框列中获取选定的行数据到 Controller 中

    checkbox - Android,复选框在可扩展列表中随机选中/未选中

    android - Salesforce 移动 sdk 抛出错误 com.android.volley.servererror,基本网络执行请求 201

    javascript - jquery 如何在(几乎)准确的时间内始终如一地执行动画功能?

    javascript - 检查 Node.js 中 json 对象是否未定义

    android - @anim/fragment_fade_enter 包含在哪里?

    jquery - 回调前和回调后

    javascript - 使用 2 行选项卡、1 个内容框、javascript/jQuery 创建选项卡