WKWebView接入PDF.js过程记录处理总结

问题

最近用WKWebView读取PDF文件出现字体异常、电子图章不显示的问题,后来查找很多解决方案,最后决定用PDF.js的方式来实现

解决方案

  1. 参考https://www.jianshu.com/p/ded81b392d4d 写了demo能接入PDF,但部分字体在真机上还是接入异常,后来使用gulp generic-legacy生成generic-legacy稳定包之后,对Safari进行兼容后,终于能修复字体异常的问题
  2. PDF.js自带顶部工具类功能,如果想要去掉,只能通过修改viewer.css来实现,添加如下代码div.toolbar { display: none; } #outerContainer #mainContainer div.toolbar { display: none !important; /* hide PDF viewer toolbar */ opacity: 0.5 !important; } #outerContainer #mainContainer #viewerContainer { top: 0 !important; /* move doc up into empty bar space */ } NSString *viwerPath = [[NSBundle mainBundle] pathForResource:@"viewer" ofType:@"html" inDirectory:@"generic/web"]; NSString *urlStr = [NSString stringWithFormat:@"file://%@?file=%@#page=1",viwerPath,filePath]; urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]]; [self loadRequest:request];bytes方式动态加载读取:SBundle mainBundle] pathForResource:@"viewer" ofType:@"html" inDirectory:@"generic/web"]; NSURL * viwerPathURL = [NSURL fileURLWithPath:viwerPath]; NSURL * dir = viwerPathURL.URLByDeletingLastPathComponent; [self loadFileURL:viwerPathURL allowingReadAccessToURL:dir]; //动态加载的写法 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSData *data = [NSData dataWithContentsOfURL:filePath]; NSUInteger len = [data length]; uint8_t myArray[len]; [data getBytes:&myArray length:len]; NSMutableArray<NSString *> *bytes = [NSMutableArray array]; const uint8_t *rawBytes = data.bytes; for (NSUInteger i = 0; i < data.length; i++) { [bytes addObject:[NSString stringWithFormat:@"%d", (int)rawBytes[i]]]; } NSString *javaScriptArray = [bytes componentsJoinedByString:@","]; NSString *strForEvaluate = [NSString stringWithFormat: @"PDFViewerApplication.open(new Uint8Array([%@]));", javaScriptArray]; [self evaluateJavaScript:strForEvaluate completionHandler:^(id Result, NSError * _Nullable error) { if (error) { NSLog(@"This is error....%@",error.description); } else if(Result) { NSLog(@"+++%@",Result); } }]; });demo地址:https://github.com/freesan44/PDFJSReader
  3. 读取本地PDF文件的方式有两个,一个是初始化接入参数,一个是通过bytes方式动态加载读取 初始化接入参数:

参考:

https://github.com/mozilla/pdf.js

https://www.jianshu.com/p/fd5f248a8158

https://www.jianshu.com/p/ded81b392d4d

https://github.com/mozilla/pdf.js/issues/2784

本文转载于网络 如有侵权请联系删除

相关文章

  • 一个sql生成hive日期维度表

    目录1、日期维度表2、生成语句3、用例1、日期维度表num字段名字段中文名描述数据类型1date日期日期yyyMMdd格式bigint2week星期,数字型星期,数字型0-6bigint3week_cn星期中文名星期中文名星期一……string4year_weeks一年中的第几周一年中的第几周123……bigint5mon_dt本周周一日期本周周一日期bigint6sun_dt本周周日日期本周周日日期bigint7month年月年月,yyyyMM格式bigint8month_short月份简写月份简写,MM格式1~12bigint9month_cn月份中文名月份中文名一月……string10quarter季度季度,yyyyQ1\2\3\4string11quarter_short季度数字型季度数字型1-4bigint2、生成语句sethive.execution.engine=tez; withdatesas( selectdate_add("2010-01-01",a.pos)asd from(selectposexplode(split(repeat("

  • 一天一个 Linux 命令(7):touch 命令

    本文为joshua317原创文章,转载请注明:转载自joshua317博客https://www.joshua317.com/article/98一、简介Linuxtouch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。二、格式说明touch[OPTION]...FILE...touch[选项]...文件...三、选项说明-a或--time=atime或--time=access或--time=use 只更改存取时间。 -c或--no-create 不建立任何文档。 -d 使用指定的日期时间,而非现在的时间。 -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。 -m或--time=mtime或--time=modify 只更改变动时间。 -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。 -t 使用指定的日期时间,而非现在的时间。复制四、命令功能touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间。复制五、常见用法1、创建不存在的文件touchtest1.t

  • prometheus 告警指标

    记录了prometheus告警指标主机和硬件监控可用内存指标主机中可用内存容量不足10%-alert:HostOutOfMemory expr:node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes*100<10 for:5m labels: severity:warning annotations: summary:Hostoutofmemory(instance{{$labels.instance}}) description:Nodememoryisfillingup(<10%left)\nVALUE={{$value}}\nLABELS:{{$labels}}复制内存节点内存压力大。主要页面故障率高-alert:HostMemoryUnderMemoryPressure expr:rate(node_vmstat_pgmajfault[1m])>1000 for:5m labels: severity:warning annotations: summary:Hostmemoryundermemory

  • 「无糖快乐水」就安全了?不不,心血管疾病的风险照样增加

    肥胖、糖尿病和心血管疾病,是人们现今谈“糖”色变的三大原因。随着健康管理意识的加强,无糖饮料俨然已经成为一种人们追求健康的甜饮替代品。不过,市面上所谓的无糖(代糖)并不代表着健康,先前哈佛大学的研究就表明,多喝代糖饮料可能会比多含糖饮料带来更高的糖尿病风险。而最近JACC的一项研究表明:跟含糖饮料一样,代糖饮料也会引起心血管疾病。还能不能愉快地喝无糖饮料了?(抱紧手中的无糖快乐水)「无糖」,还有心血管疾病风险?该研究从2009年启动,目的是随访调查摄入含糖饮料或人工甜味饮料(ASB,即代糖饮料),与患心血管疾病(CVD)风险之间的关系。随访开始后,定期对参与者进行在线问卷调查(检查身体活动、经济状况等)。每隔6个月,要求参与者填写3份详细的24小时饮食记录。项目至2019年,十年间总共随访调查了104760名参与者(平均基线年龄42.9±14.6岁),每位参与者收取的饮食记录平均数为5.7±3.1。△图源:JACC除去一些可能存在的因素干扰,十年间,总共有1379位参与者首次发生CVD的病例,首次患CVD的风险统计如下: 在含糖饮料组中,相较于不喝含糖饮料的群体,含糖饮料低消费群体(中

  • TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法

    本文实例讲述了TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法。分享给大家供大家参考,具体如下:在程序调试的过程中,想要调试显示详细的错误信息,需要修改application\config.php文件中进行设置,设置两处:把show_error_msg的值false改为true//显示错误信息 'show_error_msg'=true,复制改完以后的提示为:这种提示看不出哪里出问题,如果要显示详细的错误,要再修改一处:修改完以后的错误提示变得很详细了。更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《ZendFrameWork框架入门教程》及《PHP模板技术总结》。希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

  • 在CentOS8下搭建PXC集群

    PXC简介PXC是PerconaXtraDBCluster的缩写,是Percona公司出品的免费MySQL集群产品。PXC的作用是通过mysql自带的Galera集群技术,将不同的mysql实例连接起来,实现多主集群。在PXC集群中每个mysql节点都是可读可写的,也就是主从概念中的主节点,不存在只读的节点。PXC实际上是基于Galera的面向OLTP的多主同步复制插件,PXC主要用于解决MySQL集群中数据同步强一性问题。PXC可以集群任何mysql的衍生版本,例如MariaDB和PerconaServer。由于PerconaServer的性能最接近于mysql企业版,性能相对于标准版的mysql有显著的提升,并且对mysql基本兼容。所以在搭建PXC集群时,通常建议基于PerconaServer进行搭建。关于数据库集群方案的选择可以参考:浅谈数据库集群方案PXC的特点同步复制,事务在所有集群节点要么全部提交完成,要么全部失败多主复制,不存在主从角色的划分,可以在任意一个节点进行读/写操作数据同步的强一致性,所有节点的数据是实时一致的PXC集群节点越多,数据同步的速度就越慢,所以PX

  • 在 Pycharm 中安装及使用 Jupyter (图文详解)

    Pycharm更新了对Jupyter的功能支持,结合IntelliJ的自动补全代码,自动格式化代码,执行调试,版本控制,以及大量的插件支持。让你在高颜值环境下,高效编写代码,效果如下:材料Pycharm19.03专业版Jupyterconda安装Jupyter1.安装condahttps://blog.csdn.net/u011262253/article/details/888282292.使用conda安装condacreate-nmyjupyteranacondajupyter condaactivatemyjupyter复制3.获取密码密文jupyternotebook--generate-config--allow-root复制4.将密码复制sha1:XXXXXXXXXXXXXXX,备用,配置jupyternotebook--generate-config--allow-root复制在配置文件中输入c.NotebookApp.ip='XX.XX.XX.XX' c.NotebookApp.allow_root=True c.NotebookApp.open_

  • 2019产业互联网峰会(大亚湾)企点演说全纪录

    导语改革开放40年,各行各业的增速,主要源于巨大的市场红利。地方政策扶持、低廉的人力、资源成本,很多企业家靠着速度和激情就获得了第一桶金。如今,人口红利接近饱和、流量成本越来越高。接下来,各行各业只有把圈住的一亩三分地,降本增效、提质控险,才能收获下一阶段的果实。去年,产业互联网时代正式拉开序幕。产业互联网最大的机会来自于产业链的打通,但每个行业打通的方式不一样、产业结构不一样,每一个行业都需要数字化的技术和工具,都需要有各自的方案。中国市场早期SaaS先行者腾讯企点的前身是企业QQ和营销QQ。这两款产品分别于2005年和2010年面市,区别于当时市面上如SAP、甲骨文等价格高昂的重型软件,这两款产品让可能连IT部门都没有的中小企业能够借助轻量级的即时通讯工具进行高效的企业管理和客户管理。这也是中国市场上早期出现的SaaS产品。现在,腾讯企点服务于百万级企业客户,连接亿万用户,覆盖80多个行业。我们的产品从营销获客、商机转化、交易撮合到留存复购,覆盖了客户的全生命周期。2019年8月7日由慧聪集团、中国电子商会共同主办的2019中国产业互联网峰会(大亚湾)在广东惠州隆重召开 腾讯云副总

  • Qt官方示例-Markdown编辑器

    基于QWebEngineView与QWebChannel实现的Markdown编辑器。0x00原理Markdown编辑器演示了如何使用QWebChannel和JavaScript库为自定义标记语言提供富文本预览工具。Markdown是一种轻量级的标记语言,具有纯文本格式语法。可以在浏览器中查看时将内容呈现为富文本格式。  Markdown编辑器主窗口分为编辑区域和预览区域。编辑区域(左栏): 该编辑器区域使用QPlainTextEdit实现。预览区域(右栏): 预览区域使用QWebEngineView实现的。为了呈现文本,借助Web引擎内部的JavaScript库,将Markdown文本转换为HTML格式。预览是通过QWebChannel发送编辑区域的文本内容到QWebEngineView渲染(支持边编辑边渲染更新)。0x01实现为编辑区域加载markdown格式文件。QFiledefaultTextFile(":/default.md"); defaultTextFile.open(QIODevice::ReadOnly); ui->editor->s

  • 从零开始搭建腾讯云服务器 (一)

    本篇博文旨在将近期搭建云服务器的步骤记录下来。1、定义云服务器是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其管理方式比物理服务器更简单高效。用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器。云服务器帮助您快速构建更稳定、安全的应用,降低开发运维的难度和整体IT成本,使您能够更专注于核心业务的创新。2、需求客户端(PC、平板电脑、智能机等)能够公网访问服务器端(服务器、云服务器)存储的相应资源(图片、视频、文本等)。3、步骤以本地计算机访问云服务器中存储的图片为例。3.1、租用云服务器常见的云服务器有七牛、阿里云、腾讯云、金山云、百度云等,技术成熟而且价格公道,这里选用腾讯云。a、进入腾讯云官网主页,使用qq号方式进行登录,成功后。如下图:b、点击菜单栏“云产品”-----“所有云产品”-----“云服务器”-----“立即选购”,根据不同的需求进行类别选择(操作系统、机型、公网带宽、系统盘、数据盘大小等),如下图:购买前先用优惠劵 c、支付完毕则收到购买成功的邮件通知,如下图:d、购买成功后,点击菜单栏“管理中心”对云服务器进行相应的设置,例如:重置密码,开关机设置

  • Python3导入自定义模块

    Python的开源模块是个好东西,大牛们共享的许多模块也加快了大家开发的速度,许多开源模块可以在这里找到 https://pypi.python.org/pypi下面结合开源模块graphics说说Python3如何导入自定义模块。方法一:通过sys模块导入自定义模块的path sys模块是python内置的,因此我们导入自定义模块的步骤如下: 先导入sys模块;然后通过sys.path.append(path)函数来导入自定义模块所在的目录;最后导入自定义模块。方法二:通过pth文件找到自定义模块 创建一个module_graphics.pth文件,里面内容就是graphics模块所在的目录:D:\Python\Python3rdEdSolutionsAndCode_Zelle将该module_graphics.pth文件放到python安装路径的site-packages文件夹。这样就可以导入并使用自定义模块了。当然,还有别的方法导入自定义模块的。不管用什么方法,都是殊途同归罢了。

  • 深度 | 一文介绍3篇无需Proposal的实例分割论文

    选自Medium作者:BarVinograd机器之心编译参与:NurhachuNull、黄小天本文解析了实例分割领域中的三篇论文,它们不同于主流的基于proposal和Faster-RCNN的方法,比如MaskR-CNN、MaskLab以及最新的PANet,后者在多个数据集(CityScapes、COCO以及MVD)上实现了当前最优的结果。基于proposal的实例分割架构存在三个根本缺陷。首先,两个物体可能共享同一个或者非常相似的边界框。在这种情况中,maskhead无法区分要从边界框中拾取的对象。这对于其所在边界框中具有低填充率的线状物体(例如自行车和椅子)而言是非常严重的问题。第二,架构中没有任何能够阻止两个实例共享像素的东西存在。第三,实例的数量通常受限于网络能够处理的proposal的数量(通常为数百个)。MaskR-CNN的架构此外,这种架构很复杂,难以调节和「调试」。在这个问题的前身目标检测中,已经成功使用了更简单的单阶段架构,比如RetinaNet。使用了实例嵌入之后,每个对象在N维空间中被分配了一个「颜色」。网络处理图像,并产生与输入图像相同大小的密集输出。网络输出中

  • 深度神经进化大有可为?Uber详解如何用它优化强化学习 | 5篇论文

    作者KennethO.Stanley&JeffClune 夏乙编译自UberEngineeringBlog 量子位出品|公众号QbitAI在深度学习领域,目前训练有很多层和数百万连接的深度神经网络(DNN)的常规方法,是随机梯度下降(SGD)。很多人认为,SGD有效计算梯度的能力至关重要。然而,我们要发布5篇系列论文,支持一种正在兴起的认识:通过用进化算法来优化神经网络的神经进化(neuroevolution)也是为强化学习(RL)训练深度神经网络的一种有效方法。遗传算法是训练深度神经网络的一种有效替代方法我们发明了一项新技术来有效地演化DNN,发现一个极度简单的遗传算法(GA)可以用来训练有400多万个参数的深度卷积网络来靠输入像素玩雅达利游戏,在很多游戏上胜过了现代的深度强化学习算法,比如DQN、A3C、和进化策略(ES),也因为并行性更好而实现了更快的速度。这样的结果会让人惊讶,既是因为没想到不基于梯度的GA能很好地适应这么大的参数空间,也是因为没想到把GA用到RL上能够实现媲美或超越最先进的技术。我们进一步表明,GA的新颖性搜索等增强提高了它的能力,也适用于DNN的规模

  • linux抓取snmp trap告警命令,linux snmptrap的发送与接收

    大家好,又见面了,我是你们的朋友全栈君。linuxsnmptrap的发送与接收由于需要管理服务器的一些参数,比如CPU使用率,IOwait之类的指标,管理方通过snmpwalk进行五分钟一次对受管服务器的轮询。此类指标为业务指标,是必须了解的一些参数,另需要有告警指标信息。但由于告警信息一般是由受管服务器进行主动告警,这时候就不能通过管理方主动使用snmpwalk来进行,而是由受管服务器通过snmptrap进行。以下是对双方进行snmptrap的一些设置。首先是管理方,需要先配置snmptrapd.conf,可以将之放在与snmpd.conf同一个路径下,在我本地环境下为(/etc/snmp/snmptrapd.conf)配置代码:Conf代码authcommunityexecute,log,netpublictraphandle.1.3.6.1.4.1.2021.251.1/root/traptest/test.pl其中authcommunity是为了设置所有用户的访问权限:可执行,记录,传递。设置traphandle(即收到.1.3.6.1.4.1.2021.251.1类OID信息

  • 腾讯云全球应用加速修改通道的属性api接口

    1.接口描述接口请求域名:gaap.tencentcloudapi.com。 本接口(ModifyProxiesAttribute)用于修改实例的属性(目前只支持修改通道的名称)。 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:ModifyProxiesAttribute。 Version 是 String 公共参数,本接口取值:2018-05-29。 Region 否 String 公共参数,本接口不需要传递此参数。 InstanceIds.N 否 ArrayofString (旧参数,请切换到ProxyIds)一个或多个待操作的通道ID。 ProxyName 否 String 通道名称。可任意命名,但不得超过30个字符。

  • 造轮子-AgileConfig基于.NetCore的一个轻量级配置中心

    微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移。玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的可以选,比如spring-cloud-config,apoll,disconf等等。而我为什么还要造一个轮子呢?一来这些都不是.net实现的,我就想试试用.netcore实现一个,而且他们也对.net不太友好,也只有apoll提供了官方的.net客户端。二来这些组件都太重量级了,比如apoll,光跑起来就要部署多个节点(admin,portal,metasevice)还要依赖eureka。很多旧的项目往微服务迁移的时候并不是一下次全部调整完成的,可能是一步步来的,比如先把所有的服务都容器化,并没有使用微服务全家桶。而且有的项目也不需要微服务全家桶,毕竟微服务不是银弹,很多项目单体结构就足够了,有些项目传统的SOA架构也可以了。(唠叨一句,那种毫无流量毫无并发的项目,几人几天就搞完的强上微服务真的好吗?)但是这些项目也可能是分布式的,容器化部署的,那么这些项目我觉得也是需要配置中心的,因为在分布式、容器化环境下更改配置实在是太麻烦了。可以说配置中心并不是微服务独有的。基

  • nginx 前后端分离 代理转发,解决跨域问题

    场景 适用于公司有前端,项目采用前后端分离。类似于我们后端springboot提供接口,前端专门写html调用相应的接口,解决跨域问题 配置说明 worker_processes1; events{ worker_connections10240; } http{ includemime.types; default_typeapplication/octet-stream; client_max_body_size200M; client_header_buffer_size8k; large_client_header_buffers816k; log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_logon; sendfileon; keepalive_timeout300; gzipon; gzi

  • XNect:单RGB相机实时多人3D动作捕捉

    目录1.背景介绍2.相关工作3.整体方法4.姿态估计4.1阶段一预测4.1.12D分支:2D位姿预测和部位关联4.1.23D分支:预测中间3D位姿编码4.1.3训练过程4.2阶段二预测4.2.1训练过程5.动作捕捉:阶段三5.1身份跟踪和重新识别5.2相对骨长和绝对高度的计算5.3运动骨架拟合6.结果6.1系统特点及应用6.2在单人3D姿态数据集上的性能6.3多人3D位姿数据集的性能6.4网络结构评估6.5信道稀疏三维姿态编码评价6.6骨骼拟合的评估(第三阶段)7.讨论和未来工作8.结论 XNect:Real-timeMulti-Person3DMotionCapturewithaSingleRGBCamera ​图1:实际测试效果 论文提供一种基于RGB视频的实时多人运动捕捉,该方法分为三个阶段:在第一个阶段,通过卷积神经网络估计每个人的2D和3D姿态特征,该部分设计了一个快速的网络结构SelecSLS;在第二个阶段,通过全连接的神经网络将遮挡部分2D姿态和3D姿态特征推理成完整的3D姿态;在第三个阶段,应用时空骨架模型拟合每个人预测的2D和3D姿态,目的是为了进一步协调2D和3

  • WaitForSingleObject 和 WaitForMultipleObjects函数

    1.WaitForSingleObject 等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。这些等待函数中最常用的是WaitForSingleObject:   DWORDWaitForSingleObject(HANDLEhObject,DWORDdwMilliseconds); 当线程调用该函数时,第一个参数hObject标识一个能够支持被通知/未通知的内核对象。第二个参数dwMilliseconds.允许该线程指明,为了等待该对象变为已通知状态,它将等待多长时间。调用下面这个函数将告诉系统,调用函数准备等待到hProcess句柄标识的进程终止运行为止: WaitForSingleObject(hProcess,INFINITE); 第二个参数告诉系统,调用线程愿意永远等待下去(无限时间量),直到该进程终止运行。 通常情况下,INFINITE是作为第二个参数传递给WaitForSingleObject的,不过也可以传递任何一个值(以毫秒计算)。顺便说一下,INFINITE已经定义为0xFFFFFFFF(或-1)。当然,传递I

  • 音频均衡器各频段的听感影响

    对于音频均衡器的调节一定要注意使用正确的方法,否则是不能发挥出均衡器这一有效调节手段的功能的。由于音频均衡器是声音信号频率响应反应及振幅进行调整的声电处理设备,因此首先对各个频带范围内声音的听觉特性做一个简单的了解。如下:频率段(Hz):16k—20k听感影响:这段频率可能很多人都听不到,因此,听不到此段频率并不意味着器材无法回放,当然也不代表您的听力不够好,只有很少人可以听到20kHz。这段频率可以影响高频的亮度,以及整体的空间感,这段频率过少会让人觉得有点闷,太多则会产生飘忽感,容易产生听觉疲劳。代表性的乐器:电子合声、古筝钢琴等乐器的泛音。 频率段(Hz):12k-16k听感影响:这段频率能够影响整体的色彩感,所谓小提琴的“松香味”就是由此段频率决定的,这段频率过于醋淡会导致乐器失去个性,过多则会产生毛刺感,在后期处理的时候,往往会通过激励器来美化这段频率。代表性的乐器:镲、铃、铃鼓、沙锤、铜刷、三角铁等打击乐器的高频泛音。 频率段(Hz):8k-12k听感影响:8-12kHz是音乐的高音区,对音响的高频表现感觉最为敏感。适当突出(5dB以下)对音响的的层次和

  • 完成取消计时器函数。点击Start按钮后,开始计数。点击Stop按钮后,停止计数。

    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <title>Document</title> <scripttype="text/javascript">varnum=0;vari;functionstartCount(){document.getElementById('count').value=num;num=num+1;i=setTimeout(startCount,1000);}setTimeout(startCount,1000);functionstopCount(){clearTimeout(i);}</script></head><body><form><inputtype="text"id="count"/><inputtype="button"value="Start"onClick="startCount()"/><inputtype

相关推荐

推荐阅读