CN109284104A - 基于网页汇编语言控制页面跳转的方法 - Google Patents
基于网页汇编语言控制页面跳转的方法 Download PDFInfo
- Publication number
- CN109284104A CN109284104A CN201811140770.0A CN201811140770A CN109284104A CN 109284104 A CN109284104 A CN 109284104A CN 201811140770 A CN201811140770 A CN 201811140770A CN 109284104 A CN109284104 A CN 109284104A
- Authority
- CN
- China
- Prior art keywords
- function
- parameter
- javascript
- webpage
- webassembly
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Human Computer Interaction (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请是基于网页汇编语言控制页面跳转的方法,包括有步骤(1)、使用C++语言编写一函数,通过函数的参数、以字符串的形式获取要跳转的目标URL地址;调取目标JavaScript函数,将转换后的字符组作为参数传递给目标JavaScript函数;步骤(2)、将C++源代码编译为LLVM bytecode,再将bytecode通过编译工具转换为WebAssembly;步骤(3)、重新编写一个JavaScript函数,其名称、参数与步骤(1)中被调取的目标JavaScript函数一致;通过重新编写JavaScript函数的参数,获取要跳转的网页目标地址;步骤(4)、在HTML页面中,首先加载步骤(2)中得到的WebAssembly并解析,再加载步骤(3)中得到的JavaScript函数并解析,使用HTML的DOM标准函数,控制页面跳转到目标地址。
Description
技术领域
本发明涉及一种基于网页汇编语言(WebAssembly)控制页面定向跳转的方法,属于计算机软件编程与互联网应用技术领域。
背景技术
目前,伴随互联网络数据传输带宽的不断提升、以及无线移动设备的功能完善,对于前端网页的效果要求也日益提高。现有浏览器中的JavaScript函数一般是在虚拟机(VirtualMachine)中执行的,该虚拟机能够最大化地优化代码,这也使得JavaScript函数被称为速度最快的动态语言之一。
但尽管如此,它还是无法与原生的C/C++代码相媲美,所以网页汇编语言(WebAssembly)适时地得到了广泛应用。使用WebAssembly,可以在浏览器中运行一些高性能、低级别的编程语言,可用它将大型的C和C++代码库比如游戏、物理引擎甚至是桌面应用程序导入Web平台。WebAssembly同样可在JavaScript虚拟机中运行,且其表现得更好。两者可以自由交互、互不排斥,这样就同时拥有了两者最大的优势。
出于数据安全的考虑,现有网页汇编语言(WebAssembly)都是运行于浏览器中的沙盒环境中,因此无法直接地获取浏览器(BOM)或者网页(DOM)的API,也就是无法直接对HTML元素进行操作,诸如控制页面定向跳转的功能无法直接实现,从而给进一步提高网页安全运行性能带来较大的阻碍。
有鉴于此,特提出本专利申请。
发明内容
本发明在于解决上述现有技术存在的问题而提供了一种基于网页汇编语言控制页面跳转的方法,以期克服现有WebAssembly无法直接获取BOM和DOMAPI的不足,实现动态网页跳转而无需第三方插件。
为实现上述发明目的,所述基于网页汇编语言控制页面跳转的方法包括有:
步骤(1)、使用C++语言编写一函数,通过函数的参数、以字符串的形式获取要跳转的目标URL地址(页面地址);调取目标JavaScript函数,将转换后的字符组作为参数传递给所述C++语言编写的函数;
步骤(2)、将C++源代码编译为LLVM bytecode(Low Level Virtual Machine,底层虚拟机字节码),再将bytecode(字节码文件)通过编译工具转换为WebAssembly(网页汇编语言文件,扩展名为.wasm);
步骤(3)、重新编写一个JavaScript函数,其名称、参数与上述步骤(1)中被调取的目标JavaScript函数一致;通过重新编写JavaScript函数的参数,获取要跳转的网页目标地址;
步骤(4)、在HTML(超文本标记语言,即Hyper Text Mark-up Language)页面中,首先加载上述步骤(2)中得到的WebAssembly(网页汇编语言文件)并解析,然后加载上述步骤(3)中得到的JavaScript函数并解析,使用HTML的DOM(文档对象模型,即Document ObjectModel)标准函数,控制页面跳转到目标地址。
进一步地,在所述步骤(1)中,通过C++函数的参数获取到目标地址后,将字符串转换为UTF-8格式的字符组。
在所述步骤(4)中,在网页汇编语言文件(WebAssembly)的跳转函数被执行后调取JavaScript函数,以实现页面的定向跳转。
综上内容,所述基于网页汇编语言控制页面跳转的方法具有以下优点:
1、可动态地实现网页的跳转,无需第三方插件,网页安全性能得到较大的保障。
2、可充分利用WebAssembly的技术优势,其代码格式是二进制,无法直接地在浏览器中被看到源码,其代码安全性能得到了直接、较大的改善。
附图说明
图1为基于WebAssembly控制页面定向跳转的流程示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的说明。
实施例1,如图1所示,给出了基于WebAssembly控制页面定向跳转的总体处理流程,其中主要包括以下步骤:
步骤(1)、实现一个C++函数
该C++函数拥有一个参数,可以通过此参数收到要跳转的目标URL地址,参数类型为字符串;在函数体中,需要首先对传入的字符串进行转码,然后调取JavaScript函数并将转码后的字符数组传入;
1)字符串转换
对作为函数参数传入的目标地址字符串,进行循环遍历,将每个字符转化为UTF-8标准编码格式,并存入一个字符数组中。对字符串进行转码,是为了避免将地址传入JavaScript函数时,发生编码错误导致地址产生乱码。
2)调取JavaScript函数
通过Emscripten提供的宏函数EM_ASM_ARGS,将要调取的JavaScript函数名称作为第一个参数,转换编码后的目标URL地址作为第二参数传入。
步骤(2)、将C++源代码编译为WebAssembly;
1)将C++源代码编译为二进制字节码
通过GCC编译工具得到二进制字节码,这是一种跨语言的底层虚拟机字节码,理论上所有强类型编程语言均可以生成这种字节码。
2)将字节码转译为WebAssembly
通过Emscripten将上一步中得到的二进制字节码生成为WebAssembly的.wasm文件,由于WebAssembly是二进制格式,相比JavaScript而言,其代码体积同比小很多,并且由于已经是面向机器码的格式,也无需在运行前对源代码耗费时间进行JIT(Just-In-Time)编译操作。
步骤(3)、实现JavaScript函数;
1)本函数的名称需要与步骤1中调取的JavaScript函数名称保持一致
2)字符数组转码
对作为函数参数传入的数组,进行循环遍历,将每个被转为UTF-8编码格式的‘字符’进行转码,将其转换为JavaScript中的字符:
i.将当前‘字符’向右移4位
a)移位后的值在0-7之间,使用fromCharCode函数将其转换为JavaScript中的字符
b)移位后的值为12、13,跟0x1F做‘和’运算并将结果左移6位;取当前位置+1的值跟0x3F做‘和’运算;最后将二者做‘或’运算,而后传入fromCharCode函数,转换成JavaScript的字符
c)移位后的值为14,跟0x0F做‘和’运算并将结果左移12位;取当前位置+1的值跟0x3F做‘和’运算并左移6位;取当前位置+2的值跟0x3F做‘和’运算;最后将三个值做‘或’运算,之后传入fromCharCode函数,转换成JavaScript的字符。
ii.每次遍历后的值存入一个字符串变量;完成遍历后,即得到跳转的目标地址。
3)调取HTML的APIDOM中的跳转函数,将作为参数传入的目标地址字符串数组作为参数传入
2.在HTML中加载WebAssembly和JavaScript文件
1)通过HTML的<script>标签加载JavaScript文件并解析
2)通过网络请求去加载WebAssembly字节码文件
3)在获取到字节码后需要转换成ArrayBuffer后才能被编译,通过WebAssembly的API WebAssembly.compile编译后得到WebAssembly.Module
在获取到module后通过WebAssembly.Instance API去实例化module,获取到Instance后就可以调用。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (3)
1.一种基于网页汇编语言控制页面跳转的方法,其特征在于:包括有以下步骤,
步骤(1)、使用C++语言编写一函数,通过函数的参数、以字符串的形式获取要跳转的目标URL地址;调取目标JavaScript函数,将转换后的字符组作为参数传递给目标JavaScript函数;
步骤(2)、将C++源代码编译为LLVM bytecode,再将bytecode文件通过编译工具转换为扩展名是.wasm的WebAssembly;
步骤(3)、重新编写一个JavaScript函数,其名称、参数与上述步骤(1)中被调取的目标JavaScript函数一致;通过重新编写JavaScript函数的参数,获取要跳转的目标URL地址;
步骤(4)、在HTML页面中,首先加载上述步骤(2)中得到的WebAssembly并解析,然后加载上述步骤(3)中得到的JavaScript函数并解析,使用HTML的DOM标准函数,控制页面跳转到目标地址。
2.根据权利要求1所述的基于网页汇编语言控制页面跳转的方法,其特征在于:在所述步骤(1)中,通过C++函数的参数获取到目标地址后,将字符串转换为UTF-8格式的字符组。
3.根据权利要求1或2所述的基于网页汇编语言控制页面跳转的方法,其特征在于:在所述步骤(4)中,在WebAssembly的跳转函数被执行后调取JavaScript函数,以实现页面的定向跳转。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811140770.0A CN109284104A (zh) | 2018-09-28 | 2018-09-28 | 基于网页汇编语言控制页面跳转的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811140770.0A CN109284104A (zh) | 2018-09-28 | 2018-09-28 | 基于网页汇编语言控制页面跳转的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109284104A true CN109284104A (zh) | 2019-01-29 |
Family
ID=65181835
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811140770.0A Pending CN109284104A (zh) | 2018-09-28 | 2018-09-28 | 基于网页汇编语言控制页面跳转的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109284104A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110198479A (zh) * | 2019-05-24 | 2019-09-03 | 浪潮软件集团有限公司 | 一种基于webassembly的浏览器音视频解码播放方法 |
CN110263533A (zh) * | 2019-04-28 | 2019-09-20 | 清华大学 | 网页安全防护方法 |
CN110324410A (zh) * | 2019-06-18 | 2019-10-11 | 中国南方电网有限责任公司 | 发起网页请求的方法、装置、计算机设备和存储介质 |
CN110399133A (zh) * | 2019-06-25 | 2019-11-01 | 西北大学 | 一种基于前端字节码技术的JavaScript代码优化方法 |
CN110399576A (zh) * | 2019-07-19 | 2019-11-01 | 北京字节跳动网络技术有限公司 | 页面切换方法、装置、可读介质及电子设备 |
CN110489942A (zh) * | 2019-08-06 | 2019-11-22 | 南开大学 | 一种WebAssembly文件的处理方法及系统 |
CN111913712A (zh) * | 2019-05-08 | 2020-11-10 | 北京字节跳动网络技术有限公司 | 用于在Web端部署神经网络模型的方法和装置 |
CN112269602A (zh) * | 2020-11-10 | 2021-01-26 | 深圳晶泰科技有限公司 | 一种WebAssembly加载方法、装置及存储介质 |
CN113282301A (zh) * | 2021-07-22 | 2021-08-20 | 北京麟卓信息科技有限公司 | 基于高级语言与汇编语言相关性的汇编指令转换方法 |
CN113760379A (zh) * | 2020-05-20 | 2021-12-07 | 武汉斗鱼鱼乐网络科技有限公司 | 一种在已发布程序中增加参数的方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106383710A (zh) * | 2016-09-19 | 2017-02-08 | 成都知道创宇信息技术有限公司 | 一种网页嵌入方法 |
US20180267847A1 (en) * | 2016-03-31 | 2018-09-20 | Appbrilliance, Inc. | Application programming interface fingerprint data generation at a mobile device executing a native mobile application |
-
2018
- 2018-09-28 CN CN201811140770.0A patent/CN109284104A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180267847A1 (en) * | 2016-03-31 | 2018-09-20 | Appbrilliance, Inc. | Application programming interface fingerprint data generation at a mobile device executing a native mobile application |
CN106383710A (zh) * | 2016-09-19 | 2017-02-08 | 成都知道创宇信息技术有限公司 | 一种网页嵌入方法 |
Non-Patent Citations (2)
Title |
---|
AMADEUS: ""WebAssembly起步"", 《HTTPS://SEGMENTFAULT.COM/A/1190000012798495?UTM_SOURCE=TUICOOL&UTM_MEDIUM=REFERRAL》 * |
刘启文: "《Java Web编程技术》", 31 August 2016 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110263533A (zh) * | 2019-04-28 | 2019-09-20 | 清华大学 | 网页安全防护方法 |
CN111913712A (zh) * | 2019-05-08 | 2020-11-10 | 北京字节跳动网络技术有限公司 | 用于在Web端部署神经网络模型的方法和装置 |
CN110198479A (zh) * | 2019-05-24 | 2019-09-03 | 浪潮软件集团有限公司 | 一种基于webassembly的浏览器音视频解码播放方法 |
CN110198479B (zh) * | 2019-05-24 | 2021-10-22 | 浪潮软件股份有限公司 | 一种基于webassembly的浏览器音视频解码播放方法 |
CN110324410A (zh) * | 2019-06-18 | 2019-10-11 | 中国南方电网有限责任公司 | 发起网页请求的方法、装置、计算机设备和存储介质 |
CN110324410B (zh) * | 2019-06-18 | 2022-04-05 | 中国南方电网有限责任公司 | 发起网页请求的方法、装置、计算机设备和存储介质 |
CN110399133A (zh) * | 2019-06-25 | 2019-11-01 | 西北大学 | 一种基于前端字节码技术的JavaScript代码优化方法 |
CN110399133B (zh) * | 2019-06-25 | 2020-10-27 | 西北大学 | 一种基于前端字节码技术的JavaScript代码优化方法 |
CN110399576A (zh) * | 2019-07-19 | 2019-11-01 | 北京字节跳动网络技术有限公司 | 页面切换方法、装置、可读介质及电子设备 |
CN110399576B (zh) * | 2019-07-19 | 2023-02-10 | 北京字节跳动网络技术有限公司 | 页面切换方法、装置、可读介质及电子设备 |
CN110489942A (zh) * | 2019-08-06 | 2019-11-22 | 南开大学 | 一种WebAssembly文件的处理方法及系统 |
CN113760379A (zh) * | 2020-05-20 | 2021-12-07 | 武汉斗鱼鱼乐网络科技有限公司 | 一种在已发布程序中增加参数的方法和装置 |
CN112269602A (zh) * | 2020-11-10 | 2021-01-26 | 深圳晶泰科技有限公司 | 一种WebAssembly加载方法、装置及存储介质 |
CN112269602B (zh) * | 2020-11-10 | 2023-12-29 | 深圳晶泰科技有限公司 | 一种WebAssembly加载方法、装置及存储介质 |
CN113282301B (zh) * | 2021-07-22 | 2021-11-02 | 北京麟卓信息科技有限公司 | 基于高级语言与汇编语言相关性的汇编指令转换方法 |
CN113282301A (zh) * | 2021-07-22 | 2021-08-20 | 北京麟卓信息科技有限公司 | 基于高级语言与汇编语言相关性的汇编指令转换方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109284104A (zh) | 基于网页汇编语言控制页面跳转的方法 | |
US8533693B2 (en) | Embedding expressions in XML literals | |
US8327328B2 (en) | System and method for creating target byte code | |
US8423953B2 (en) | System and method for creating target byte code | |
US9160789B2 (en) | Adaptable application programming interfaces and specification of same | |
Verborgh et al. | Survey of semantic description of REST APIs | |
TWI525543B (zh) | 混合式動態碼編譯裝置、方法及其服務系統 | |
CN104714830A (zh) | 基于原生开发语言实现跨平台应用开发的系统及方法 | |
CN103164193B (zh) | 一种模板的渲染方法及装置 | |
CN102023856A (zh) | 根据用户的需求格式化输出及操作伺服端业务数据的方法 | |
CN103177199A (zh) | 网页应用代码保护方法及系统和执行的提速方法及系统 | |
CN103176807A (zh) | 网页应用执行的提速方法及系统 | |
Prokhorenko et al. | Context-oriented web application protection model | |
US20080209395A1 (en) | Automatic code replacement | |
Duregård et al. | Embedded parser generators | |
US8584105B1 (en) | Javascript application programming interfaces for independently compiled javascript binaries | |
CN110110299B (zh) | 文本变换方法、装置以及服务器 | |
Haldar et al. | The source is the proof | |
Puder | A cross-language framework for developing ajax applications | |
Brady | Cross-platform compilers for functional languages | |
Flatt | The Racket Reference | |
Son et al. | Smart virtual machine code based compilers for supporting multi programming languages in smart cross platform | |
Nellaiyapen | Practical WebAssembly: Explore the fundamentals of WebAssembly programming using Rust | |
Tirronen | Stopping injection attacks with code and structured data | |
MacLeod | Roses are red, violets are blue, this book about tulips is better than you |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190129 |
|
RJ01 | Rejection of invention patent application after publication |