【问题标题】:How to display a dialog box for mobile users only on a non-mobile site如何仅在非移动网站上为移动用户显示对话框
【发布时间】:2012-01-26 19:35:20
【问题描述】:

我知道检测移动浏览器的各种方法,但我很难找到一种方法来为移动用户弹出一个对话框,让他们确认他们想要查看常规页面(而不是切换到移动网站),即使他们在网站的非移动版本上。不幸的是,这是我的要求,而不是简单的重定向。

我原以为我可以使用 jquery mobile,但我没有找到一种方法来使正确的 rel=dialog 工作正常。如果有一个预先构建的 jquery 脚本,浏览器会检测并弹出一个对话框让移动用户要求他们切换到移动 url?

【问题讨论】:

    标签: jquery mobile jquery-mobile dialog


    【解决方案1】:

    我有一个解决方案可以解决您的问题。它使用 css 并有一个 MediaQuerie。如果浏览器宽度小于 350px 则显示内容。检查一下 - http://jsfiddle.net/Rw6MD/

    【讨论】:

    • 我喜欢这个主意,但是如果我是横向的(在大多数新的移动设备上大约为 800-960 像素)怎么办?
    • 你总是可以为浏览器的高度和宽度创建一个 MediaQuerie
    • @media all and (max-height: 320px) or (max-width: 320px)。这不起作用,你知道如何在媒体查询中使用or 语句吗?
    • 在 Chrome 和 Firefox 中,它仅适用于 width,如果我将高度重新调整为小,.mobile 元素不会显示。
    • 抱歉忘记放东西了,现在应该可以工作了 - jsfiddle.net/Rw6MD/4
    【解决方案2】:
    $(function () {
        if (navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/iPhone/i)) {
            $.mobile.changePage($('#my-dialog'), {
                role : 'dialog'
            });
        }
    });
    

    您可以使用$.mobile.changePage() 函数以编程方式调用对话框:http://jquerymobile.com/demos/1.0/docs/api/methods.html

    您很可能希望更新决定浏览器是否为移动浏览器的if 语句,我发布的代码只是捕获 Android 和 iPhone 设备的示例。

    这是match() 的一些文档:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/match

    如果正则表达式包含 g 标志,则该方法返回一个 包含所有匹配项的数组。如果没有匹配,该方法 返回 null。

    null 将解析为 falsy,查找任何匹配项将解析为 truthy

    更新

    好的,所以要在没有 jQuery Mobile 的情况下显示模式对话框,您只需创建一个覆盖网站其余部分的 DOM 元素:

    $(function () {
        if (navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/iPhone/i)) {
            $('body').append('<div style="position : absolute; z-index : 999; top : 0; left : 0; width : 100%; height : 100%; background : #000; opacity : 0.5; filter : alpha(opacity=50);" /><div style="position : absolute; z-index : 1000; top : 50%; left : 50%; width : 200px; height : 100px; margin-left : -100px; margin-right : -50px;">Your dialog text goes here</div>');
        }
    });
    

    我喜欢在页面顶部显示一个“通知栏”,告诉用户有关移动网站的信息:

    $(function () {
        if (navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/iPhone/i)) {
            $('body').prepend('<div id="mobile-notice" style="position : relative; display : none;">copy goes here</div>').find('#mobile-notice').slideDown(500);
        }
    });
    

    【讨论】:

    • 我知道如何进行移动检测,但我发现无法在实际页面上为对话框包含任何 div。这是一个独立于移动网站的网站,虽然我可以在非移动网站的标题中包含 jquery mobile 脚本,但我不能在该页面上使用 jquery mobile css,我想我必须加载对话框页面(使用它自己的 jquery 移动样式表),但看不到使用 $.mobile.changePage() 执行此操作的方法...并且 $.mobile 是否因为我包含脚本而可用?是否必须初始化或其他?
    • 只需使用 CSS 创建您自己的对话框(z-index 和绝对定位,因为移动浏览器不支持固定定位)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多