【问题标题】:How reliable is Chrome's mobile emulation?Chrome 的移动仿真有多可靠?
【发布时间】:2014-07-28 14:07:30
【问题描述】:

我有这个问题——似乎只是有时——jquery-embedly 在 Chrome 的移动仿真下会弄乱iScroll(如果我禁用触摸仿真或完全禁用移动仿真,则可以正常工作):

http://jsfiddle.net/frank_o/nRrB5/

我询问过的很多 Android 用户都能够在他们的原生设备上正常滚动——这可能是由于 Chrome 中的移动仿真错误造成的吗?如果是这样,有人知道是什么让它恐慌吗?

$(document).on('pagecontainershow', function () {

    // ISCROLL

    $('[data-iscroll]').each(function () {
        $(this).wrapInner("<div class='scroller'></div>")
            .wrapInner("<div class='scroller_wrapper'></div>");

        var wrapper = $(this).find('.scroller_wrapper').first(),
            windowHeight = $(window).height();

        wrapper.height(windowHeight);

        var scrollerTest = new IScroll(wrapper.get(0), {
            eventPassthrough: false,
            scrollX: false,
            scrollY: true,
            preventDefault: false,
            scrollbars: true
        });


        scrollerTest.on('scrollEnd', function () {
            // For Android users to see whether it's iScroll or their native scroller
            $('.ui-page').css('background', '#ccc')
        });
    });

    document.addEventListener('touchmove', function (e) {
        e.preventDefault();
    }, false);


    // EMBEDLY
    var element = $('a');

    element.embedly({
        key: '',
        query: {
            maxwidth: 400,
            autoplay: true
        },
        display: function (data) {
            if (data.thumbnail_url) {
                element.html('<img src="' + data.thumbnail_url + '" />');
            }
        }
    }).on('click', function () {
        var data = $(this).data('embedly');
        $(this).replaceWith(data.html);

        return false;
    });
});

【问题讨论】:

  • 移动模拟器无法与真实设备浏览器进行比较,它们是在不同的操作系统中实现的,您永远无法确定结果。
  • 你能确认这确实是 Chrome 移动模拟器的问题吗?
  • 完全不可靠

标签: javascript android jquery google-chrome


【解决方案1】:

这个例子中的问题不在客户端模拟器上,而是在代码中。

embedly 将在 iscroll 初始化后加载内容,因此 iscroll 插件无法检索正确的高度。

Badly embedly 插件似乎没有回调函数(至少我没有找到它)来说明它何时完成加载内容。

所以我编辑您的脚本删除了高度集并插入手动超时以加载 iscroll。

setTimeout(function(){
  $('[data-iscroll]').each(function () {
  ...
},1000);

jsfiddle

在设备上它可以正常工作,因为他们使用普通的浏览器滚动条(因为用户使用鼠标滚动)而不是假的滚动条(至少他们使用它直到它完成滚动而不是传递给普通滚动)模拟器与触摸事件一起使用,这是浏览器模拟不能与移动浏览器相同的示例^^。

【讨论】:

  • 嗨!感谢您的尝试,但恐怕仍然无法正常工作。您是否尝试过在 Chrome 中模拟 Google Nexus 10,然后访问 jsfiddle.net/gasp10/nRrB5/9/show? Embedly 实际上确实有一个回调函数 (done),我在其中尝试刷新 iScroll,但这没有任何区别。
  • 取出 Embedly 代码,iScroll 在移动仿真下工作正常。
  • 我认为.scroller_wrapper 的高度是必需的。 iScroll 应在加载后自动更新 .scrollerscrollerTest.refresh() 的高度。
  • 是的,我已经在各种 chrome 仿真上对其进行了测试,但我没有看到错误。可能是我不了解您的真正错误,但是如果我在您的示例中正确理解移动设备,则 iscroll 停止在实际总滚动量的一半
  • 问题在于,在 Chrome 仿真中,在执行 embedly() 后无法滚动 iScroll 滚动条。请注意,还有一个 Chrome 滚动条可以单击并向下拖动,但可以忽略。
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 2020-08-24
  • 2017-07-10
  • 2019-02-25
  • 1970-01-01
  • 2014-05-22
  • 2019-09-13
  • 1970-01-01
相关资源
最近更新 更多