日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一般瀏覽器先加載主頁,再請求關聯的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();

分享到:
標簽:腳本 js
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定