您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

通过浏览器打开页面时执行js脚本 改变浏览器“指纹”

时间:2022-09-19 15:32:02  来源:今日头条  作者:Mutousoft

一般浏览器先加载主页,再请求关联的js脚本文件。不管你把js代码嵌入在html中,还是独立保存为一个文件,都必须等待主页加载完成,js代码加载完成后才能执行。网上有人说把js代码放在head里面,其实这样并不影响脚本执行时机。因为js或html还没有加载,何谈执行js代码。先看一下页面加载资源的顺序

浏览器加载页面资源顺序


再简单分析一下onload事件的执行时机。
Document.onload
它是在结构和样式加载完才执行js。【就是在html和css都完事以后才执行】

Window.onload
它不仅仅要在结构和样式加载完,还要执行完所有的样式、图片这些资源文件,全部加载完才会触发window.onload事件。

jquery中的ready
指定在DOM完全加载时要执行的函数。

也许你又会想到,先执行JAVAScript,再打开页面可以吗?答案是否定的,因为执行完JavaScript后,执行结果保存在变量中,当打开一个新的页面时,js变量会被清空。

有什么方法在页面加载前就执行js代码呢,单从网页来考虑似乎无解,那就需要从浏览器端入手。当输入网址或点击链接导致需要加载另一个页面前就执行js代码(注意只是准备加载页面,还没有下载一个字符)。这样做可以在页面加载前先给某些变量赋值,且这个变量值在页面加载完成后不会消失。
打开木头浏览器的项目管理窗口,创建一个脚本代码步骤,并输入需要执行的JavaScript代码,选择代码执行时机为“页面加载前执行”,保存这个项目后,只要执行一次这个项目(点击测试也可以),在浏览器中打开任何网址时,都会先执行这段JavaScript代码。如下图所示,为方便体验具体效果,设置一个弹窗代码在页面加载前执行。

加载页面前执行脚本


然后在浏览器中输入打开一个网址,此时页面还没有加载,就弹出了窗口。由于是模态弹窗,只有点击确定后才会继续加载页面内容。页面加载完成后,js变量值亦不会丢失。

执行时机测试


如果需要停止在页面加载前执行脚本代码,只需要再添加一个脚本代码步骤,代码为空,设置执行时机为“停止加载前执行”。当此步骤执行一次后,在浏览器打开网页就不会再执行脚本代码弹出窗口了。

停止加载前执行脚本


网页加载前注入执行JavaScript脚本,具体有什么作用呢?可以用于改变系统环境参数,比如修改屏幕分辨率;执行如下代码后,网页获取分辨率时将得到预设值而非实际分辨率。

 

  1. screen.width = 1024;
  2. screen.height = 768;
  3. screen.avAIlWidth = 1024;
  4. screen.availHeight =768;
  5. screen.availablewidth =1024;
  6. screen.availableheight =768;

 


还可以修改系统函数,替换函数功能。比如把下面这段代码放在页面加载前执行,改变系统的alert函数功能,那么此页面再执行alert就不会弹出窗口了。

 

  1. window.alert=function(txt){
  2. return txt;
  3.  

 

某些网站通过JavaScript功能函数采集“浏览器指纹”,同样可以通过修改功能函数,避免被网站跟踪。比如在页面加载前执行以下代码,自动给canvas画布指纹添加变化的噪声,导致页面每次获取的“浏览器指纹”都不一样。

 

  1. var inject = function () {
  2. const toBlob = HTMLCanvasElement.prototype.toBlob;
  3. const toDataURL = HTMLCanvasElement.prototype.toDataURL;
  4. const getImageData = CanvasRenderingContext2D.prototype.getImageData;
  5.  
  6. var noisify = function (canvas, context) {
  7. if (context) {
  8. const shift = {
  9. 'r': Math.floor(Math.random() * 10) - 5,
  10. 'g': Math.floor(Math.random() * 10) - 5,
  11. 'b': Math.floor(Math.random() * 10) - 5,
  12. 'a': Math.floor(Math.random() * 10) - 5
  13.  
  14.  
  15. const width = canvas.width;
  16. const height = canvas.height;
  17. if (width && height) {
  18. const imageData = getImageData.Apply(context, [0, 0, width, height]);
  19. for (let i = 0; i < height; i++) {
  20. for (let j = 0; j < width; j++) {
  21. const n = ((i * (width * 4)) + (j * 4));
  22. imageData.data[n + 0] = imageData.data[n + 0] + shift.r;
  23. imageData.data[n + 1] = imageData.data[n + 1] + shift.g;
  24. imageData.data[n + 2] = imageData.data[n + 2] + shift.b;
  25. imageData.data[n + 3] = imageData.data[n + 3] + shift.a;
  26.  
  27.  
  28.  
  29. window.top.postMessage("canvas-fingerprint-defender-alert", '*');
  30. context.putImageData(imageData, 0, 0);
  31.  
  32.  
  33.  
  34.  
  35. Object.defineProperty(HTMLCanvasElement.prototype, "toBlob", {
  36. "value": function () {
  37. noisify(this, this.getContext("2d"));
  38. return toBlob.apply(this, arguments);
  39.  
  40.  
  41.  
  42. Object.defineProperty(HTMLCanvasElement.prototype, "toDataURL", {
  43. "value": function () {
  44. noisify(this, this.getContext("2d"));
  45. return toDataURL.apply(this, arguments);
  46.  
  47.  
  48.  
  49. Object.defineProperty(CanvasRenderingContext2D.prototype, "getImageData", {
  50. "value": function () {
  51. noisify(this.canvas, this);
  52. return getImageData.apply(this, arguments);
  53.  
  54.  
  55.  
  56. document.documentElement.dataset.cbscriptallow = true;
  57.  
  58. inject();


Tags:js脚本   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
通过浏览器打开页面时执行js脚本 改变浏览器“指纹”
一般浏览器先加载主页,再请求关联的js脚本文件。不管你把js代码嵌入在html中,还是独立保存为一个文件,都必须等待主页加载完成,js代码加载完成后才能执行。网上有人说把js代码放...【详细内容】
2022-09-19  Search: js脚本  点击:(531)  评论:(0)  加入收藏
illustrator插件-拼版功能开发-印前角线-js脚本开发-ai插件
1.算法程序illustrator是矢量编辑软件,在印刷方面的一个重要功能就是拼版,开发一个印前角线功能,源代码如下所示:Ver = "v7.3";var platFormType = Folder.fs;if (platFormType...【详细内容】
2022-03-17  Search: js脚本  点击:(517)  评论:(0)  加入收藏
▌简易百科推荐
JavaScript的异步编程常见模式
在JavaScript中,异步编程是一种处理长时间运行操作(如网络请求或I/O操作)的常见方式。它允许程序在等待这些操作完成时继续执行其他任务,从而提高应用程序的响应性和性能。JavaS...【详细内容】
2024-04-12  靳国梁    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  前端新世界  微信公众号  Tags:JavaScript   点击:(6)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践&mdash;&mdash;如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  前端新世界  微信公众号  Tags:JavaScript   点击:(27)  评论:(0)  加入收藏
又出新JS运行时了!JS运行时大盘点
Node.js是基于Google V8引擎的JavaScript运行时,以非阻塞I/O和事件驱动架构为特色,实现全栈开发。它跨平台且拥有丰富的生态系统,但也面临安全性、TypeScript支持和性能等挑战...【详细内容】
2024-03-21  前端充电宝  微信公众号  Tags:JS   点击:(26)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  前端历险记  微信公众号  Tags:JavaScript   点击:(20)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  WangLiwen    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  京东云开发者    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06    51CTO  Tags:JavaScript   点击:(53)  评论:(0)  加入收藏
JS小知识,使用这6个小技巧,避免过多的使用 if 语句
最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要...【详细内容】
2024-01-30  前端达人  今日头条  Tags:JS   点击:(58)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  南城大前端  微信公众号  Tags:JavaScript   点击:(71)  评论:(0)  加入收藏
站内最新
站内热门
站内头条