美文网首页
另一种骚操作的定时器

另一种骚操作的定时器

作者: NowhereToRun | 来源:发表于2018-06-05 00:12 被阅读4次

HTML meta标签大家都比较熟了。

其中http-equiv属性,可以用来
设置过期时间提供网站关键词等用于SEO设置字符集、等等。

<!-- 设置过期时间(不缓存) -->
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<!-- 关键词 -->
<meta http-equiv="keywords" content="keyword,keywords,keywords">
<meta http-equiv="description" content="this is description">
<!-- 字符集 -->
<meta http-equiv="content-Type" content="text/html;charset=gb2312">

等等。今天要记录的一个是用来刷新网站的refresh属性。

<!-- 5s后刷新 -->
<meta http-equiv="refresh" content="5" >
<!-- 5s后跳转到新浪网 -->
<meta http-equiv="refresh" content="5;URL=https://sina.cn" >

既然可以定时刷了,那么我就可以用他来代替定时器,主页面创建一个iframe,子页面定时刷新,然后通过postMessage传递到主页面。

闲话不多说,代码如下:

let sao = (() => {
  let timers = {}
  let i = 0

  function _guid() {
    return (+new Date()).toString(36) + (i++)
  }

  function _clear(id) {
    if (timers[id]) {
      window.removeEventListener('message', timers[id].cb)
      timers[id].ifr.parentNode && timers[id].ifr.parentNode.removeChild(timers[id].ifr)
      delete timers[id]
    }
  }

  function _set(callback, millisec) {
    let id = _guid()
    // 应该肯定不会重复
    if (timers[id]) {
      _clear(id)
    }
    let ifr = document.createElement('iframe')
    ifr.style.display = 'none'
    timers[id] = {
      ifr: ifr,
      cb(e) {
        if (e.data === 'refresh') {
          callback()
        }
      }
    }
    window.addEventListener('message', timers[id].cb, false);
    ifr.src = `data:text/html,
    <!DOCTYPE html>
      <html>
      <head>
        <meta http-equiv="refresh" content="${Math.ceil(millisec / 1000)}">
        <title>1</title>
      </head>
      <body>
          <script>top.postMessage('refresh', '*');</script>
      </body>
      </html>
    `
    // 转个码更好
    // ifr.src = 'data:text/html,%3C%21DOCTYPE%20html%3E%0A%3Chtml%3E%0A%3Chead%3E%0A%09%3Cmeta%20charset%3D%22utf-8%22%20%2F%3E%0A%09%3Cmeta%20http-equiv%3D%22refresh%22%20content%3D%22' + Math.ceil(millisec / 1000) + '%22%20id%3D%22metarefresh%22%20%2F%3E%0A%09%3Ctitle%3Ex%3C%2Ftitle%3E%0A%3C%2Fhead%3E%0A%3Cbody%3E%0A%09%3Cscript%3Etop.postMessage%28%27refresh%27%2C%20%27%2A%27%29%3B%3C%2Fscript%3E%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E'
    document.body.insertBefore(ifr, document.body.childNodes[0])
    return id
  }

  return {
    setInterval: _set,
    clearInterval: _clear
  }
})()


// 使用
let i = 0;
sao.setInterval(function() {
  document.querySelector('p').innerHTML = ++i;
}, 1000)```

相关文章

  • 另一种骚操作的定时器

    HTML meta标签大家都比较熟了。 其中http-equiv属性,可以用来设置过期时间、提供网站关键词等用于S...

  • 定时器

    定时器分为两种,一种是延时定时器,另一种是循环定时器。 setTimeout() setTimeout()是延时定...

  • 骚操作

    文‖茹云 心里想说,却被人生生贴胶带,本来以为可以诉说一下心里的难受与舒服,结果被这样的骚操作,一阵懵逼。 不知道...

  • 骚操作

    突然想哭的时候,你会有哪些操作? 成年人的世界不容易呀,总有那么几个瞬间特别想哭,那么你们有什么样的骚操作呢? 支...

  • 骚操作

    先说下近期的三个项目,这三个项目是造成我骚操作的主要原因。近期的三个项目分别是: A、5月13日-5月20...

  • 骚操作

    无语仰望天。 就在风向晚为自己回国后的经历感到无奈至极时,一道痞坏痞坏的声音幽幽传来。 “嘿,美女,喜欢喝奶茶?哥...

  • 骚操作

    一路上,沈青石都保持了沉默闭目养神,不言不语。这在秦子衿的眼里,他是又恢复了病弱清冷的模样。 直到车子驶入天玺沈宅...

  • 骚操作

    不知简书啥时新开了"骚操作":随时给你一脸的烂广告,喊你点点点,不点还不行!刚开始还怀疑是我的手机中了毒,后来发现...

  • linux常用命令

    grep管道 分屏操作 基础命令 骚操作

  • React Native定时器、直接操作(setNativePr

    React Native 进阶(三)--定时器、直接操作(setNativeProps)、调试 定时器 setTi...

网友评论

      本文标题:另一种骚操作的定时器

      本文链接:https://www.haomeiwen.com/subject/shuusftx.html