昨天家人讓我下載一個MV,是騰訊視頻上的。
我尋思這直接找到音頻文件地址下載不就OK了么 發現我打開控制台之后,播放着的視頻立刻變成靜態圖片,關閉控制台就恢復正常。
這是如何實現的呢 根據前人的經驗整理了一下。
方法一:
var x = document.createElement('div'); var isOpening = false; Object.defineProperty(x, 'id', { get:function(){ // 在這里放入你的代碼 document.write('Console is opened'); } }); console.info(x);
方法二:
(function () {var re = /x/; var i = 0; console.log(re); re.toString = function () { return '第 ' + (++i) + ' 次打開控制台'; }; })()
這兩種方案都是利用了console打印日志的異步策略。
當使用console打印對象的時候(RegExp/Date/Array/Dom),輸出的是引用,也就是說,顯示到控制台上的是最新的值,而不是執行輸出那一刻的值。如下圖:
即,每次顯示的時候,都會重新獲取信息。
好了,現在寫一個完整的模擬Demo
<html> <script> var ConsoleManager={ onOpen(){ alert("Console is opened") }, onClose(){ alert("Console is closed") }, init(){ var self = this; var x = document.createElement('div'); var isOpening = false,isOpened=false; Object.defineProperty(x, 'id', { get(){ if(!isOpening){ self.onOpen(); isOpening=true; } isOpened=true; } }); setInterval(function(){ isOpened=false; console.info(x); console.clear(); if(!isOpened && isOpening){ self.onClose(); isOpening=false; } },200) } } ConsoleManager.onOpen = function(){ alert("Console is opened!!!!!") } ConsoleManager.onClose = function(){ alert("Console is closed!!!!!") } ConsoleManager.init(); </script> </html>