zoukankan      html  css  js  c++  java
  • javascript 多线程Web Worker不引用外部js文件的方法

    最近在Android开发中

    Webview通过调用JavascriptInterface的方式与App交互

    在交互的过程中,有些App上的操作时间会比较长,Web中调用的话会造成程序假死的情况

    于是想到了如下几种方式来实现

    1、js多线程(js正常情况下只支持单一线程,因此此方案被否决)

    2、采用异步方式(此方案程序仍旧会假死)

    3、采用Web Worker方式(此方案是HTML5中为支持多线程新出的一种方法)

         此方案最终也被否决,是因为线程中无法使用alert和window等对象,同样就不能调用app中的JavascriptInterface

         但由于方案不错,所以把实现方式贴出来,以备后飨。

      其中getScriptPath可以实现web worker不引用外部js的方法

    JS代码:

    function getScriptPath(foo) { return window.URL.createObjectURL(new Blob([foo.toString().match(/^s*functions*(s*)s*{(([sS](?!}$))*[sS])/)[1]], { type: 'text/javascript' })); }
    
        var worker = new Worker(getScriptPath(function () {
            self.addEventListener('message', function(e) {
            var value = 0;
            while(value <= e.data){
                self.postMessage(value);
                value++;
            }
        }, false);
    
        }));
        
        worker.addEventListener('message', function (e) {
            document.getElementById("result1").innerHTML = e.data;
        }, false);
        
        worker.postMessage(10000); 

    HTML:

    <div id="result1"></div>

    最终采用Android的AsyncTask的方式来实现,详细代码就不描述

    了解AsyncTask的方法就可以使用

  • 相关阅读:
    iOS中block的探究
    输出IOS 版本号
    Luke's Homepage
    ObjectiveC: delegate的那点事儿
    浅谈XCode编译器的Blocks功能
    一个横版的tableViewFantasyView
    iOS中block的探究
    NSRunLoop 概述和原理
    Block使用中的一些疑问解答
    Flex 中的注释
  • 原文地址:https://www.cnblogs.com/Cavalry/p/4748072.html
Copyright © 2011-2022 走看看