2014-11-07 17 views
6

Tôi đang cố truy cập một số giá trị trong ứng dụng web từ xa để tạo tiện ích mở rộng của Chrome.Tìm biến nào chứa giá trị bằng cách sử dụng Chrome Devtools

Vì vậy, tôi muốn tìm biến JS nào có giá trị nhất định và tôi tự hỏi liệu có thể thực hiện một số loại "tìm kiếm toàn cục" trên các giá trị của tất cả các biến trong bộ nhớ hay không.

Điều này có thể thực hiện được với bất kỳ công cụ nào không? Thanh tra, hồ sơ, vv ...?

Trả lời

3

Bạn có thể duyệt qua tất cả các mục trong phạm vi toàn cầu như thế này:

var test = 123, 
    someVar = 812; 

for(key in window){ 
    if(typeof window[key] === 'number' && window[key] == 123){ 
     console.log(key, window[key]); 
    } 
} 

Cùng với đó là một số đệ quy, và bạn có lý thuyết có thể lặp qua tất cả các đối tượng và con cái của họ, có sẵn trong một đối tượng:

function searchObject(object, search){ 
    for(key in object){ 
     if(typeof object[key] === 'number' || typeof object[key] === 'string'){ 
      if(object[key] === search){ 
       console.log(key, window[key]); 
      } 
     }else if(typeof object[key] === 'object'){ 
      searchObject(object[key], search); 
     } 
    } 
} 

Đây chỉ là nhanh và bẩn ví dụ. Nó chỉ kiểm tra sự bình đẳng nghiêm ngặt (Vì vậy, không có "chuỗi chứa"), và nó lặp qua mảng với for in, điều đó là điều ác. Nhưng nó sẽ cung cấp cho bạn một ý tưởng về cách nó hoạt động. Tuy nhiên,

Đừng vượt qua window hoặc document với chức năng này. Điều đó sẽ không hoạt động do tham chiếu vòng tròn.


Tuy nhiên, bạn cũng có thể đặt breakpoint in your code in the chrome dev tools.
Sau đó, bạn có thể kiểm tra giá trị hiện tại của các biến trong vùng "Phạm vi biến" ở bên phải.

+0

tại sao không làm 'cửa sổ [key] === 123' thay vì so sánh các loại bằng tay và sau đó sử dụng ép buộc bình đẳng? –

+0

@JanDvorak: Nó đã ném lỗi cho tôi nếu tôi không: 'Loại lỗi không xác định: Không thể chuyển đổi đối tượng thành giá trị nguyên thủy '(Bàn điều khiển Chrome) – Cerbrus

+1

Điều này có thể thất bại một cách dễ dàng: ngoại lệ bảo mật được ném khi chạm vào khung hình gốc, cấu trúc vòng (trên thực tế, có một số ít) ... –

3

Tất cả tín dụng cho this answer goes to tomwrong. Xem câu trả lời của anh ấy để biết thêm chi tiết về các vấn đề/cải tiến cho đoạn mã này.

function globalSearch(startObject, value) { 
    var stack = [[startObject,'']]; 
    var searched = []; 
    var found = false; 

    var isArray = function(test) { 
     return Object.prototype.toString.call(test) === '[object Array]'; 
    } 

    while(stack.length) { 
     var fromStack = stack.pop(); 
     var obj = fromStack[0]; 
     var address = fromStack[1]; 

     if(typeof obj == typeof value && obj == value) { 
      var found = address; 
      break; 
     }else if(typeof obj == "object" && searched.indexOf(obj) == -1){ 
      if (isArray(obj)) { 
       var prefix = '['; 
       var postfix = ']'; 
      }else { 
       var prefix = '.'; 
       var postfix = ''; 
      } 
      for(i in obj) { 
       stack.push([ obj[i], address + prefix + i + postfix ]); 
      } 
      searched.push(obj); 
     } 
    } 
    return found == '' ? true : found; 
} 
Các vấn đề liên quan