仅显示以下 2 篇带「测试」关键字的文章。 返回词云  或  查看全部文章

将 WebWorker 改造成无外链文件模式

2013-05-06 by Dron

WebWorker 允许我们在浏览器中使用多线程来进行高耗时计算,但是,WebWorker 必须引用同域的 JS 文件,这在有些场景下不是很方便应用。

我尝试对此进行包装,期望调用 WebWorker 的地方可以直接声明 Worker 文件的内容,不需再外链一个 JS 文件,以下是未经所有浏览器测试的代码,如需应用,你可能需要做些测试和改进。

var myWorker = function(){
  var functionBodyRegx, URL, contentType, code, url;

  functionBodyRegx = /^[^{]+\{([\s\S]*)\}$/;
  URL = window.URL || window.webkitURL;
  contentType = { type: "text/javascript; charset=utf-8" };

  return function( fn ){
    code = fn.toString().match( functionBodyRegx )[ 1 ];
    url = window.opera ? 
      "data:application/javascript," + encodeURIComponent( code ) :
      URL.createObjectURL( new Blob( [ code ], contentType ) );

    return new Worker( url );
  }
}();

测试代码:

var worker = new myWorker( function(){
  onmessage = function( event ){
    postMessage( event.data );    
  }
} );

worker.onmessage = function( event ){
  alert( event.data.message );
};

worker.postMessage( { message: "hello myWorker!" } );

戳这里

在 Chrome/Safari/Firefox 下测试通过,IE/Opara 下未做测试。

强制留在本页

2013-04-28 by Dron

有一些特定应用,在用户离开当前页面时会弹出一个对话框,询问是否真的离开,给用户多一次选择,以确保未完成的草稿得已保存。

这种弹窗都是在页面的 onbeforeunload 事件里实现的,这个事件还可以用来发送统计请求。我今天在考虑这个问题时来了灵感,如果在这个事件里强制地址跳回本页会如何呢?于是我造了一段测试代码:

window.onbeforeunload = function(){
  setTimeout( function(){ location.href = "#"; }, 0 );
};

将上面的代码粘贴到任意网页的 console 中执行,神奇的事情发生了:点击该网页的其它链接,根本跳不走,其实是跳走了立刻又被跳了回来(查看控制台的网络面板可以验证)。如果是在地址栏上输入其它地址,回车后也会强制被替回来,有点意思。

在 Chrome/Safari 中测试通过,Firefox 不通过,IE/Opara 未测试,有点暴力,不推荐使用。