最近在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*function\s*\(\s*\)\s*\{(([\s\S](?!\}$))*[\s\S])/)[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的方法就可以使用

javascript 多线程Web Worker不引用外部js文件的方法的更多相关文章

  1. vue2项目中引用外部js文件

    vue2项目目录如下(utils文件夹是自己手工建的,然后在utils里新建js文件): 使用import导入文件时,注意路径,路径不对会报错: 导入之后使用外部js函数时,直接写导入时的名字加小括号 ...

  2. javascript (六) 引用外部js文件

    外部的 JavaScript 也可以把脚本保存到外部文件中.外部文件通常包含被多个网页使用的代码. 外部 JavaScript 文件的文件扩展名是 .js. 如需使用外部文件,请在 <scrip ...

  3. HTML中引用外部JS文件失效原因

    今天在练习中碰到“引用外部的一个js文件但是却失效”的情况,实在不懂,百度后才知是引用的位置不对,错误的代码如下: <head> <meta charset="UTF-8& ...

  4. vue-引入外部js文件的方法和常量

    1.方法调用 a:  js文件(static/js/public.js) //函数的定义 返回上一页 export function goback(laststep) { laststep } b: ...

  5. ASP.Net Web.config 中引用外部config文件

    1. 前提准备: Web.config file: <?xml version="1.0" encoding="utf-8"?><config ...

  6. script利用src引用外部js文件,如果内部嵌套了js代码呢

    <script src='test.js' defer async> var a = 5; </script> 这个时候 var a = 5;会被忽略.

  7. vue页面引入外部js文件遇到的问题

    问题一:vue文件中引入外部js文件的方法 //在vue文件中 <script> import * as funApi from '../../../publicJavaScript/pu ...

  8. javascript中外部js文件取得自身完整路径得办法

    原文:javascript中外部js文件取得自身完整路径得办法 有时候我们需要引入一个外部js文件,这个js文件又需要用到自己的路径或者是所在的目录,别问怎么又这么变态的需求,开发做久了各种奇葩需求也 ...

  9. html引用外部js和css

    html引用外部js和css css:<link rel="stylesheet" type="text/css" href="xx.css&q ...

随机推荐

  1. linux和windows共享文件

    开发板的文档上说可以使用nfs共享文件夹,提供的命令如下: mount –t nfs –o nolock 192.168.1.244:/usr/ /mnt/ 因此我在我的win10上设了共享文件夹,然 ...

  2. RealProxy实现AOP编程(1)

    Program.cs class Program { static void Main(string[] args) { User user = " }; var processor = T ...

  3. js操作做GridView

    一:获取当前选中行的数据 function fun_selectedInfo() { //获取当前鼠标选中元素 var e=event.srcElement; //获取当前元素所在行号 var row ...

  4. find和grep的区别

    find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配. grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正侧表达式匹配 正侧表达式是包含匹配.

  5. 对C语言的知识与能力予以自评

    看到一个问卷不错,拟作为第三次作业的部分内容. 你对自己的未来有什么规划?做了哪些准备?我准备在将来成为一名合格的软件工作人员,我已经在平时有空的时间里着手代码的练习. 你认为什么是学习?学习有什么用 ...

  6. 收藏:Linux系统信息查看命令大全

    系统# uname -a               # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue   # 查看操作系统版本# cat /proc/cpuinfo  ...

  7. css基础知识点

    回顾 1.结构标记 <header></header> <nav></nav> <section></section> < ...

  8. JSP编译原理图解

  9. java中的反射,知道类名创建类,还可以设置私有属性的值

    刚刚学到了反射,感觉反射的功能好强大,所以想写篇博客记录下自己的学习成果. 利用反射来创建对象. Class c1=Class.forName("test.Person");//通 ...

  10. WEKA运行LIBSVM出现problem evaluating classifier:rand

    原来这个实验已经做了的.也出现了些问题,但是上网找到了解决方法,那个时候是完成数据挖掘的课程论文,用WEKA运行LIBSVM,也没有很深入,简单跑出结果就算了. 这次想着研讨会就讲这个,想着深入进去, ...