Chrome瀏覽器及調試教程

来源:https://www.cnblogs.com/itRobins-wx/archive/2018/02/06/8420648.html
-Advertisement-
Play Games

Chrome瀏覽器及調試教程 在web開發過程中,我們在寫JavaScript腳本時難免會遇到各種bug,這時,我們就需要去調試我們的JavaScript腳本,然後去修改代碼。最簡單的調試方法就是使用alert方法,將可信息通過alert方法的彈窗顯示出來。但是,alert方法有幾個弊端: 1)al ...


Chrome瀏覽器及調試教程

  在web開發過程中,我們在寫JavaScript腳本時難免會遇到各種bug,這時,我們就需要去調試我們的JavaScript腳本,然後去修改代碼。最簡單的調試方法就是使用alert方法,將可信息通過alert方法的彈窗顯示出來。但是,alert方法有幾個弊端:

1)alert方法在彈出視窗時會中斷程式;

2)在迴圈中使用alert()方法時,如果不點擊alert彈窗的確定按鈕,下一個alert就不會出現;

3)alert方法在顯示對象時永遠只顯示[Object],無法看到對象中的具體細節;

  由於alert方法存在上述缺點導致了alert方法只適合一些小程式。如果想要查看JavaScript腳本的執行過程,HTTP請求信息,執行過程中的數據信息則需要學會使用瀏覽器的開發者工具進行調試。

  從以下幾個方面來瞭解Chrome瀏覽器:

1.Chrome瀏覽器簡介及下載與安裝;2.瀏覽器載入Html頁面的過程;

3.Chrome瀏覽器開發者工具面板的介紹;4.使用Chrome開發者工具調試JavaScript腳本;5.Chrome瀏覽器的其他設置;


 

1.瀏覽器簡介

瀏覽器的主要功能:

  瀏覽器的主要功能就是向伺服器發出請求,在瀏覽器視窗中展示您選擇的網路資源。這裡所說的資源一般是指 HTML 文檔,也可以是 PDF、圖片或其他的類型。資源的位置由用戶使用 URI(統一資源標示符)指定。

  瀏覽器解釋並顯示 HTML 文件的方式是在 HTML 和 CSS 規範中指定的。這些規範由網路標準化組織 W3C(萬維網聯盟)進行維護。

多年以來,各瀏覽器都沒有完全遵從這些規範,同時還在開發自己獨有的擴展程式,這給網路開發人員帶來了嚴重的相容性問題。如今,大多數的瀏覽器都是或多或少地遵從規範。 

  所以,瀏覽器就是一個獲取網頁並將它顯示給用戶的工具。

瀏覽器界面介紹:

瀏覽器的用戶界面有很多彼此相同的元素,其中包括:

用來輸入 URI 的地址欄

前進和後退按鈕

書簽設置選項

用於刷新和停止載入當前文檔的刷新和停止按鈕

用於返回主頁的主頁按鈕

瀏覽器的高層結構

瀏覽器引擎 - 在用戶界面和呈現引擎之間傳送指令。

呈現引擎 - 負責顯示請求的內容。如果請求的內容是 HTML,它就負責解析 HTML 和 CSS 內容,並將解析後的內容顯示在屏幕上。

網路 - 用於網路調用,比如 HTTP 請求。其介面與平臺無關,併為所有平臺提供底層實現。

用戶界面後端 - 用於繪製基本的視窗小部件,比如組合框和視窗。其公開了與平臺無關的通用介面,而在底層使用操作系統的用戶界面方法。

JavaScript 解釋器。用於解析和執行 JavaScript 代碼,就是後面講到的JavaScript引擎。

數據存儲。這是持久層。瀏覽器需要在硬碟上保存各種數據,例如 Cookie。新的 HTML 規範 (HTML5) 定義了“網路資料庫”,這是一個完整(但是輕便)的瀏覽器內資料庫。

   目前使用的主流瀏覽器有五個:Internet Explorer、Firefox、Safari、Chrome 瀏覽器和 Opera。本文中以開放源代碼瀏覽器為例,即 Firefox、Chrome 瀏覽器和 Safari(部分開源)。根據 StatCounter 瀏覽器統計數據,目前(2011 年 8 月)Firefox、Safari 和 Chrome 瀏覽器的總市場占有率將近 60%。由此可見,如今開放源代碼瀏覽器在瀏覽器市場中占據了非常堅實的部分。


 

2.瀏覽器載入Html頁面的過程

2.1  從輸入URL到頁面載入完成都發生了什麼?

1.處理URL:輸入 URL 後的「回車」,這時瀏覽器會對 URL 進行檢查,首先判斷協議,如果是 http 就按照 Web 來處理,另外還會對這個 URL 進行安全檢查,然後直接調用瀏覽器內核中的對應方法,比如 WebView 中的 loadUrl 方法。

2.發送HTTP請求:因為網路的底層實現是和內核相關的,所以這一部分需要針對不同平臺進行處理,從應用層角度看主要做兩件事情:通過 DNS 查詢 IP、通過 Socket 發送數據,接下來就分別介紹這兩方面的內容。

2.1 DNS查詢:Chrome瀏覽器在啟動的時候首先會去載入你本地的host文件,如果URL中的功能變數名稱在host文件中設置的有對應的IP地址,就會直接將這個功能變數名稱指向這個地址。如果host中沒有URL中輸入的功能變數名稱(www.baidu.com)對應的IP地址,瀏覽器就會去訪問DNS伺服器,向DNS伺服器詢問這個功能變數名稱(www.baidu.com)對應的IP地址。

2.2 通過Socket發送數據:有了 IP 地址,就可以通過 Socket API 來發送數據了,這時可以選擇 TCP/IP 或 UDP 協議,HTTP 常用的是 TCP/IP 協議。Chrome此時就會使用TCP/IP傳輸協議,將URL中的信息通過HTTP協議發送到百度的伺服器。

3.瀏覽器接受遠程伺服器響應的數據:遠程伺服器(百度的伺服器)一般會返回給瀏覽器一個HTML(位元組碼數據)。瀏覽器接受到數據之後就對這些位元組碼數據以指定的編碼格式進行解碼。瀏覽器獲取編碼格式的途徑:

1)用戶設置,在瀏覽器中可以指定頁面編碼

2)HTTP 協議中

3)HTML頁面中<meta> 的 charset 屬性值

4.瀏覽器對HTML頁面進行渲染和佈局:

1).瀏覽器開始載入html代碼,發現<head>標簽內有一個<link>標簽引用外部CSS文件;

2).瀏覽器又發出CSS文件的請求,伺服器返回這個CSS文件;

3).瀏覽器繼續載入html中<body>部分的代碼,並且CSS文件已經拿到手了,可以開始渲染頁面了;

4).瀏覽器在代碼中發現一個<img>標簽引用了一張圖片,向伺服器發出請求。此時瀏覽器不會等到圖片下載完,而是繼續渲染後面的代碼;

伺服器返回圖片文件,由於圖片占用了一定面積,影響了後面段落的排布,因此瀏覽器需要回過頭來重新渲染這部分代碼;

5).瀏覽器發現了一個包含一行Javascript代碼的<script>標簽,趕快運行它;

6).Javascript腳本執行了這條語句,它命令瀏覽器隱藏掉代碼中的某個<div> (style.display=”none”)。杯具啊,突然就少了這麼一個元素,瀏覽器不得不重新渲染這部分代碼;

7).終於等到了</html>的到來,瀏覽器淚流滿面……

8).等等,還沒完,用戶點了一下界面中的“換膚”按鈕,Javascript讓瀏覽器換了一下<link>標簽的CSS路徑;

9).瀏覽器召集了在座的各位<div><span><ul><li>們,“大伙兒收拾收拾行李,咱得重新來過……”,瀏覽器向伺服器請求了新的CSS文件,重新渲染頁面。

註:win10打開host文件的方法:在運行(win+R)中輸入:C:\Windows\System32\drivers\etc即可

2.2  JavaScript引擎

2.2.1 JavaScript引擎是什麼?

“JavaScript引擎”通常被稱作一種 虛擬機。“虛擬機”是指軟體驅動的給定的電腦系統的模擬器。有很多類型的虛擬機,它們根據自己在多大程度上精確地模擬或代替真實的物理機器來分類。

2.2.2 JavaScript引擎是乾什麼的?

JavaScript的基本工作就是將開發者寫的JavaScript代碼轉換成能被瀏覽器理解甚至能在應用程式上運用的最優化的快捷代碼。比方說,當你寫了 var a = 1 + 1; 這樣一段代碼,JavaScript引擎做的事情就是看懂(解析)你這段代碼,並且將a的值變為2。

2.2.3 主要的JavaScript引擎有哪些?

WebKit的JavaScriptCore 和 Google 的 V8 引擎。

2.2.4 JavaScriptCore和V8引擎解析源代碼的過程

JavaScriptCore 執行 一系列步驟 來解釋和優化腳本:

1)首先它進行詞法分析,就是將源代碼分解成一系列具有明確含義的符號或字元串。

2) 然後用語法分析器分析這些符號,將其構建成語法樹。

3)接著四個 JIT(Just-In-Time)進程開始參與進來,分析和執行解析器所生成的位元組碼。

簡單來說,JavaScript 引擎會載入你的源代碼,把它分解成字元串(又叫做分詞),再 把這些字元串轉換 成編譯器可以理解的位元組碼,然後執行這些位元組碼。

Google 的 V8 引擎 是用 C++ 編寫的,它也能夠編譯並執行 JavaScript 源代碼、處理記憶體分配和垃圾回收。它被設計成由兩個編譯器組成,可以把源碼直接編譯成機器碼:

1) Full-codegen:輸出未優化代碼的快速編譯器

2) Crankshaft: 輸出執行效率高、優化過的代碼的慢速編譯器

如果 Crankshaft 確定需要優化的代碼是由 Full-codegen 生成的未優化代碼,它就會取代 Full-codegen,這個過程叫做“crankshafting”。

一旦編譯過程中產生了機器代碼,引擎就會向瀏覽器暴露所有的數據類型、操作符、對象、在 ECMA 標準中指定的函數、或任何運行時需要使用的東西,NativeScript 就是如此。


 

3.Chrome瀏覽器的開發者工具面板介紹

3.1 Chrome瀏覽器開發者工具的打開方式:

1)功能鍵F12或者Ctrl+Shift+j或者Ctrl+Shift+j打開;

2)打開瀏覽器右上角用戶設置下拉菜單,選擇更多工具,再選擇開發者工具即可打開開發者工具。

3.2 開發者工具的工具欄中常用面板介紹

Elements:查找網頁源代碼HTML中的任一元素,手動修改任一元素的屬性和樣式且能實時在瀏覽器裡面得到反饋。

Console:記錄開發者開發過程中的日誌信息,且可以作為與JS進行交互的命令行Shell。

Sources: Sources功能面板是資源面板,他主要分為四個部分,四個部分並不是獨立的,他們互相關聯,互動共同實現一個重要的功能:監控js在執行期的活動。簡單來說就是斷點啦。

Network:從發起網頁頁面請求Request後分析HTTP請求後得到的各個請求資源信息(包括狀態、資源類型、大小、所用時間等),可以根據這個進行網路性能優化。

Timeline:記錄並分析在網站的生命周期內所發生的各類事件,以此可以提高網頁的運行時間的性能。

Profiles:如果你需要Timeline所能提供的更多信息時,可以嘗試一下Profiles,比如記錄JS CPU執行時間細節、顯示JS對象和相關的DOM節點的記憶體消耗、記錄記憶體的分配細節。

Application:記錄網站載入的所有資源信息,包括存儲數據(Local Storage、Session Storage、IndexedDB、Web SQL、Cookies)、緩存數據、字體、圖片、腳本、樣式表等。

Security:判斷當前網頁是否安全。

Audits:對當前網頁進行網路利用情況、網頁性能方面的診斷,並給出一些優化建議。比如列出所有沒有用到的CSS文件等。

3.2.1 元素(Element)面板

Element面板打開方式:

1) 打開開發者工具後選擇開發者工具面板中的Element頁簽;

2) 打開瀏覽器之後,滑鼠右鍵檢查 (火狐瀏覽器是” 審查元素”)

Element面板的常用功能:

1) 實時編輯DOM節點

在Element面板的DOM樹視圖中.呈現出了當前頁面中的所有的DOM節點.滑鼠雙擊任何DOM節點都可以修改其中的屬性值,修改完成之後按回車鍵瀏覽器會立即顯示出修改後的效果.

註意:這種及時的修改只是臨時的修改,只能做調試用,實際應用中往往是調試結束後再將正確的屬性值在本地代碼中修改.

2) 實時編輯CSS樣式

在Element面板中也可以對當前頁面的DOM元素的樣式進行實時的修改,修改後元素的樣式立即生效.

實時修改某一DOM元素的樣式的操作步驟:

首先選中這個DOM元素.如果沒有打開開發者工具,可以在要修改的DOM元素上右鍵-->審查元素,然後選擇控制面板右側的Style即可看到當前DOM元素的所有CSS樣式,雙擊其中的CSS屬性值就可以修改,修改後馬上生效.如果已經打開了開發者工具,可以通過先點擊開發者工具面板最左側的放大鏡,然後再去點擊頁面上要修改的DOM元素選中這個要調試的DOM元素.此時控制面板右側的Style中就呈現出了當前選中的DOM元素的CSS屬性雙擊屬性值即可修改.

註意:這種及時的修改只是臨時的修改,只能做調試用,實際應用中往往是調試結束後再將正確的屬性值在本地代碼中修改.

3)打開盒子模型,調試邊框參數

點擊右側的Computed頁簽可以看到當前選中的元素的盒子模型參數,所有的值都是可以修改的.點擊不同的位置(top,bottom,left,right)就可以修改元素的padding,border,margin屬性值.也可以通過修改盒子模型中間的數據改變元素的width和height.修改的時候瀏覽器中的當前元素會響應地變化,同時在左側Element面板中會自動添加上響應的Stylt屬性值.當頁面上顯示的樣式符合要求之後,即可停止修改,然後將Element中生成的屬性值複製到代碼中,樣式即可永久修改.

3.2.2 控制台(Console) 面板

1)查看腳本運行過程中的異常信息;
由於JavaScript屬於弱語言類型,語法要求不嚴謹.並且JavaScript是解釋型語言,在代碼中輸入中文的標點等錯誤也不會有提示,只有運行結束後才會拋出異常信息到控制台.

如果想查看具體的異常信息,直接點擊右邊的異常信息控制台將會把我們帶到程式中錯誤出現的具體位置:

2)列印日誌信息;

上邊說到了簡單的調試可以使用alert方法將想要看到的信息顯示在彈窗中。但是alert存在弊端:阻斷程式運行,不能顯示對象的細節信息,彈出多個信息時必須點擊確定才能看到下一個彈窗的信息。這些問題使用console提供的列印日誌的方法可以完美解決。

Console常用的列印日誌的方法有:

A) console.log(“info”)顯示一般的基本日誌信息,當要顯示的基本日誌信息太多時,可以使用console.grop()方法將日誌分組;

B) Console.warn(“info”)顯示帶有黃色小圖標的警告信息;

C) Console.error(“info”)顯示帶有紅色小圖標的錯誤信息;

  Console列印日誌的使用場景:

A)在代碼中使用console.log()列印日誌信息:

B)直接在控制臺上使用console.log()列印信息:

C)清除控制臺中信息的方法:

直接在控制臺上輸出console.clear()方法人後回車即可清除控制臺上的信息。還有一種方法是直接點擊控制台左上方的清除日誌的按鈕清除日誌信息。

3)運行JavaScript腳本

控制台還有一個神奇的功能就是可以運行你輸入的JavaScript腳本,這一點非常實用。

實用場景一:快速驗證JavaScript中的方法。

將一個小數按照輸出,要求:只保留兩位小數。通過查JavaScript的API得知Number對象有一個toFixed方法可以指定小數位的長度,但是又沒有例子,最快的嘗試方法就是在控制臺上驗證:

console.log(new Number("3.1415926").toFixed(2));

實用場景二:控制臺中輸入JavaScript方法時有提示。

  通過document獲取指定id的節點的方法是document.getElementById(“id”)但是因為MyEclipse,Eclipse中在寫JavaScript時可能沒提示,自己寫太痛苦而且還容易寫錯。這時,就可以在控制臺上通過方法提示來補全這個方法。

如上圖:我們不需要完整輸入方法名,根據提示使用鍵盤的上,下鍵選擇需要的方法然後回車即可。

D)Console面板中的全局搜索(快捷鍵Ctrl+Shift+F)

打開全局搜索,輸入關鍵字,能夠搜索到包含這個關鍵字的所有的文件。

應用場景:剛到一個公司,對公司的業務不熟。登錄頁面有幾千行代碼,我只想找到登錄的那個方法。這時,輸入登錄方法名就能搜索到登錄登錄方法所在的頁面。點擊進去就能夠定位到這個方法了。

3.2.3 資源(Source) 面板

Source資源面板中顯示載入當前頁面需要的所有資源。

在Source面板中可以找到當前瀏覽器載入的頁面,然後對其中的JavaScript腳本進行斷點調試。Chrome開發者工具使用中會具體說明。

3.2.4 網路(NetWork) 面板

NetWork面板可以記錄頁面上的網路請求的詳細信息,從發起網頁請求Request後分析HTTP請求後得到的各個請求資源信息(包括狀態,資源信息,大小,所用時間,Request和Response等),可以根據這個進行網路性能優化。

  1. Controls 控制Network的外觀和功能。
  2. Filters 控制Requests Table具體顯示哪些內容。
  3. Overview 顯示獲取到資源的時間軸信息。
  4. Requests Table 按資源獲取的前後順序顯示所有獲取到的資源信息,點擊資源名可以查看該資源的詳細信息。
  5. Summary 顯示總的請求數、數據傳輸量、載入時間信息。

NetWork面板的Requests Table 包含著HTTP請求和響應的具體信息,是比較常用的一塊

  • Name 資源名稱,點擊名稱可以查看資源的詳情情況,包括Headers、Preview、Response、Cookies、Timing。
  • Status HTTP狀態碼。
  • Type 請求的資源MIME類型。
  • Initiator 標記請求是由哪個對象或進程發起的(請求源)。
  • Parser: 請求由Chrome的HTML解析器時發起的。
  • Redirect:請求是由HTTP頁面重定向發起的。
  • Script:請求是由Script腳本發起的。
  • Other:請求是由其他進程發起的,比如用戶點擊一個鏈接跳轉到另一個頁面或者在地址欄輸入URL地址。
  • Size 從伺服器下載的文件和請求的資源大小。如果是從緩存中取得的資源則該列會顯示(from cache)
  • Time 請求或下載的時間,從發起Request到獲取到Response所用的總時間。
  • Timeline 顯示所有網路請求的可視化瀑布流(時間狀態軸),點擊時間軸,可以查看該請求的詳細信息,點擊列頭則可以根據指定的欄位可以排序。

查看具體資源的詳情

通過點擊某個資源的Name可以查看該資源的詳細信息,根據選擇的資源類型顯示的信息也不太一樣,可能包括如下Tab信息:

  • Headers 該資源的HTTP頭信息。
  • Preview 根據你所選擇的資源類型(JSON、圖片、文本)顯示相應的預覽。
  • Response 顯示HTTP的Response信息。
  • Cookies 顯示資源HTTP的Request和Response過程中的Cookies信息。
  • Timing 顯示資源在整個請求生命周期過程中各部分花費的時間。

針對上面4個Tab進行詳細講解一下各個功能:

① 查看資源HTTP頭信息

在Headers標簽裡面可以看到HTTP Request URL、HTTP Method、Status Code、Remote Address等基本信息和詳細的Response Headers
、Request Headers以及Query String Parameters或者Form Data等信息。

預覽響應數據

③ 查看資源HTTP的Response信息

Response標簽裡面可根據選擇的資源類型(JSON、圖片、文本、JS、CSS)顯示相應資源的Response響應內容。下圖顯示的是當選擇的資源是CSS格式時的響應內容。

④ 查看資源Cookies信息

如果選擇的資源在Request和Response過程中存在Cookies信息,則Cookies標簽會自動顯示出來,在裡面可以查看所有的Cookies信息。


 

4.Chrome開發者工具之斷點調試

4.1 JavaScript腳本斷點調試

第一步:打開開發者工具,按F12或者在瀏覽器頁面上右鍵選擇檢查。

第二步:在Source面板中找到需要調試的文件。 

第三步:設置斷點。

第四步:觸發調試部分程式的運行,開始調試。

調試過程中常用的按鈕及快捷鍵:

跳到下一個斷點:點擊Sources面板右側的“三角按鈕” 

快捷鍵:F8

        Ctrl+\

跳到下一步(逐步跨方法):點擊Sources面板右側的第二個按鈕

快捷鍵:F10

     Ctrl+’

跳進斷點處的方法中:點擊Sources面板右側第三個按鈕

快捷鍵:F11

        Ctrl+;

跳出正在執行的方法:點擊Sources面板右側第四個按鈕

快捷鍵:Shift+F11

      Ctrl+Shift+;

禁用斷點:點擊Sources面板右側的第五個按鈕

暫停在捕獲到的異常處:點擊Sources面板右側的第六個按鈕,然後勾選Pause On Caught Exception

暫停在未捕獲的異常處:點擊Sources右側的第六個按鈕,不勾選Pause On Caught Exception.

查看斷點處,獲取的數據的值:

將滑鼠游標停留在變數上面即可,也可以將變數賦值到Console的控制臺上列印出來。

清除斷點:

在Source面板最右側面板中,找到Breakpoints打開,可以看到你打的斷點。在斷點列表出右鍵選擇Remove all breakpoints可以一次性刪除所有斷點。

4.2 XHR斷點調試

右側調試區有一個 XHR Breakpoints,點擊+ 並輸入 URL 包含的字元串即可監聽該 URL 的 Ajax 請求,輸入內容就相當於 URL 的過濾器。如果什麼都不填,那麼就監聽所有 XHR 請求。一旦 XHR 調用觸發時就會在 request.send() 的地方中斷。

4.3 事件監聽斷點

事件監聽是對我們選定的是事件類型進行監聽,當這個事件觸發的時候,程式就會在這個事件處停止。有助於我們快速找到某一個元素上綁定的事件。

應用場景:我們剛接手一個項目時,對業務不熟。想找到提交登錄事件對應的方法,但是發現頁面上登錄按鈕綁定事件寫的不是很明確,而且處理登錄業務的JavaScript腳本文件有幾百行,想找到這個按鈕很不容易。此時,我們就可以選定滑鼠的點擊事件進行監聽,當我們點擊登錄按鈕的時候控制台Sources面板會自動將我們帶到登錄方法處。

事件監聽斷點使用步驟(以查找天貓首頁登錄方法為例):

1.首先打開京東登錄頁面找到登錄按鈕;

2.在登錄按鈕上右鍵屬性==》檢查 打開開發者工具,然後打開Sources面板

3.打開Sources面板右側的Event Listener Breakpoints 找到Mouse及滑鼠事件下邊的click然後勾選上。

4. 點擊登錄按鈕,觸發滑鼠的點擊事件,發現程式中斷在JavaScript文件中,點擊面板下方的 “{}” 將代碼格式化一下,此時就找到了登錄按鈕觸發的點擊事件了。

此時就可以一步一步的像下跟,知道跟到天貓的登錄方法了。


 

5 其他設置

5.1 設置開發者工具的位置:

Chrome剛安裝好時,打開開發者工具,開發者工具預設在瀏覽器的左半邊。

可以通過開發者工具面板右上角的設置開發者工具在瀏覽器中出現的位置。

視圖1:開發者工具以一個獨立的視窗存在;視圖2:在瀏覽器下方顯示;視圖3:在瀏覽器右半邊顯示。

5.2 清除瀏覽器緩存的方法:

瀏覽器緩存(Browser Caching)是為了節約網路的資源加速瀏覽,瀏覽器在用戶磁碟上對最近請求過的文檔進行存儲,當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁碟顯示文檔,這樣就可以加速頁面的閱覽。但是,對開發人員來說,我們修改了JavaScript腳本之後需要立即看到修改的效果,所以需要清除緩存,清除緩存常用的方法有:

1.Ctrl + F5

F5通常只是刷新本地緩存;Ctrl+F5可以把INTERNET臨時文件夾的文件刪除再重新從伺服器下載,也就是徹底刷新頁面了。

2.開發者工具打開之後,快速清除緩存的方法:

開發者工具打開之後,瀏覽器刷新圖標上右鍵會出現清空緩存並硬性重新載入。這一方法能夠在開發者工具打開時快速清理緩存。

3.Ctrl + Shift + Del 快捷鍵清除緩存。

選中地址欄中的URL

按快捷鍵:Ctrl + Shit + Del  會彈出一個清除瀏覽數據的彈窗,選擇要清理的數據項之後,點擊清除瀏覽數據即可。

5.3 禁用頁面的JavaScript腳本;

應用場景:在開發互聯網電商項目時,需要一些商品圖片,於是就去京東找到一個商品打開商品圖片之後,想複製或者將這個圖片另存為,此時,發現右鍵後什麼都沒有。

原因是,京東在圖片上通過JavaScript腳本禁用了滑鼠右鍵點擊事件。此時,我們可以通過禁用當前頁面的JavaScript事件,通過滑鼠右鍵保存圖片。

禁用網頁JavaScript事件的方法:

1)開發者工具==》Settings

2)勾選Debugger下的Disable JavaScript 覆選框。


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • LSAFHTTPClient 對所有請求進行統一管理,添加了兩個隊列:一個工作隊列,一個讀寫緩存的io隊列 LSAFHTTPClient.h 代碼如下: LSAFHTTPClient.m 代碼如下: LSBaseRequest 實現網路層的統一請求,在子類請求中調用基類的請求方法。 LSBaseRe ...
  • CGAffineTransform 概述 CGAffineTransform是一個用於處理形變的類,其可以改變控制項的平移、縮放、旋轉等,其坐標系統採用的是二維坐標系,即向右為x軸正方向,向下為y軸正方向 在UIView中有一個transform屬性便是專門用來控制形變的,其使用方法如下 樣例素材 在 ...
  • 一、Block定義 Block可以理解為一個函數指針(即它是一個指針,指向某個函數) returnType (^blockName) (parameter list) = ^ (parameter list) {代碼塊}; 說明: returnType:block的返回類型,可定義為void; bl ...
  • 數字證書: 是數字形式的標識,與我們的護照和駕駛證十分相似。它是由證書頒發機構(CA)的權威機構頒發的,由該權威機構擔保證書信息的有效性。因此數字證書只有在特定的時間段內有效。 證書中包含了證書中所標識的公鑰,也就是說證書里包含了你的公鑰,公鑰與你個人信息相匹配,證書會找到用戶對應的自己的公鑰,並確 ...
  • 簡介 ReactiveCocoa(簡稱為RAC),RAC具有函數響應式編程特性,由Matt Diephouse開源的一個應用於iOS和OS X的新框架。 為什麼使用RAC? 因為RAC具有高聚合低耦合的思想所以使用RAC會讓代碼更簡潔,邏輯更清晰。 如何在項目中添加RAC? 方法1.可以使用Coco ...
  • 項目開發過程中,在完成iOS項目——項目開發環境搭建之後,我們首先需要考慮的就是我們的項目的整體框架與導航架構設計,然後在這個基礎上考慮功能模塊的完成。 一 導航架構設計 一款App的導航架構設計應該是符合人們的操作慣性和方便操作的特點,也應該在交互上更加合理和人性化。根據項目功能和定位不同,不同的 ...
  • iOS 擴展思維導向圖,如下圖所示: ...
  • UITabBarController與UINavigationController類似,UITabBarController也可以用來控制多個頁面導航,用戶可以在多個視圖控制器之間移動,並可以定製屏幕底部的選項卡欄。 藉助屏幕底部的選項卡欄,UITabBarController不必像UINaviga ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...