【问题标题】:how to use javascript to detect whether a web page is responsive on mobile如何使用 javascript 检测网页是否在移动设备上响应
【发布时间】:2013-12-21 08:25:06
【问题描述】:

我需要使用 javascript 来检测页面是否响应。在 Galaxy Note 3 上,以下是非响应页面和响应页面的值:

non-responsive: 
window.innerWidth:980 
clientWidth:980 
screen.width:640 

responsive: 
window.innerWidth:640 
clientWidth:640 
screen.width:640 

所以说如果clientWidth == screen.width 是响应式的,否则它是非响应式的是否正确?

【问题讨论】:

  • 不。这只是意味着页面被放大或缩小。

标签: javascript mobile responsive-design


【解决方案1】:

如您所知,响应式设计调用媒体查询中使用了一个重要功能,通过该功能,浏览器可以针对不同的屏幕分辨率切换替代 CSS 规则以使页面“响应”。

您可以使用 document.styleSheets 在 Javascript 中枚举 CSS 规则。和 CSS 一样

@media all and (max-width:1023px) {
    /* some styles */
}

将在 cssRules 集合中添加一些 CSSMediaRule 实例。这是我的检测代码。适用于 Chrome 和 Safari。

function isResponsive() {
  if (document.styleSheets || (typeof window.CSSMediaRule).match(/function|object/)) {
    // find avaliable style sheets
    return [].some.call(document.styleSheets, function(css) {
      if (!css.cssRules) {
        return false;
      }

      // find avaliable rules
      return [].some.call(css.cssRules, function(rule) {
        if (rule instanceof CSSMediaRule) {
          return [].some.call(rule.media, function(media) {
            return !media.match(/print/i);
          });
        }
      });
    });
  }
  // There's no avaliable style sheet, or the browser doesn't support media queries
  return false;
}

【讨论】:

  • 酷.. 谢谢! :) 只需在r = s[i].cssRules; 之后添加if (r == null) continue;
  • 不错的脚本,但请注意它不会获取任何跨域 CSS 文件(例如由 CDN 提供的文件),因此并不完全准确。此外,您可能需要检查媒体规则是否不是 @media print 规则,因为它们与页面的响应速度无关。
  • @RobCampo @media print 现在被排除在外
  • 这只是在存在跨源 css 时给出异常
猜你喜欢
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
相关资源
最近更新 更多