2017-08-16 74 views
12

Trên iOS 11 Safari mới và MacOS High Sierra Safari, mẹo đó sẽ thấy nếu window.localStorage.setItem('test', 1); (xem https://stackoverflow.com/a/17741714/1330341) ném lỗi không còn hoạt động nữa, vì nó không còn phát ra lỗi nữa và nó cũng đặt đúng mục localStorage. Có ai đã tìm ra cách nào khác để kiểm tra chế độ duyệt web riêng tư trong các phiên bản Safari mới không?Cách phát hiện duyệt web riêng tư trong iOS 11 Mobile Safari hoặc MacOS High Sierra Safari?

Trả lời

1

đã không thực sự cố gắng đó, nhưng từ việc đọc tài liệu của Apple:

https://support.apple.com/kb/ph21413?locale=en_US

Nó liệt kê các đặc điểm khác nhau của trình duyệt chế độ tư nhân (~ snip):

Khi bạn sử dụng một Private Browsing cửa sổ:

  • Mỗi tab trong cửa sổ được tách biệt với những trang khác, do đó các trang web mà bạn xem trong một tab không thể theo dõi việc duyệt web của bạn trong các tab khác.

  • Safari không nhớ các trang web bạn truy cập hoặc thông tin Tự động điền của bạn.

  • Safari không lưu trữ các trang web đang mở của bạn trong iCloud, vì vậy chúng không phải là được hiển thị khi bạn xem tất cả các tab đang mở của mình từ các thiết bị khác.

  • Các tìm kiếm gần đây của bạn không được bao gồm trong danh sách kết quả khi bạn sử dụng trường Tìm kiếm thông minh.

  • Các mục bạn tải xuống không được bao gồm trong danh sách tải xuống. (Các mục vẫn còn trên máy tính của bạn.)

  • Nếu bạn sử dụng Handoff, cửa sổ duyệt web riêng tư sẽ không được chuyển đến thiết bị iOS hoặc máy tính Mac khác.

  • Safari không nhớ các thay đổi đối với cookie của bạn hoặc trang web khác dữ liệu. Safari cũng yêu cầu các trang web và những người khác cung cấp các trang web đó với nội dung (bao gồm cả nhà quảng cáo) không theo dõi việc duyệt web của bạn, mặc dù tùy thuộc vào các trang web để tôn trọng yêu cầu này.

  • Plugin hỗ trợ Duyệt web riêng tư ngừng lưu trữ cookie và các thông tin theo dõi khác.

Từ trên, đặc biệt tôi thấy thú vị rằng Safari yêu cầu các trang web "không theo dõi" duyệt web. Đây có thể là cơ chế để tìm kiếm, để xác định xem có sử dụng tính năng duyệt web riêng tư hay không.

Xem câu trả lời này cho một ví dụ:

Implementing Do not track in asp.net mvc

Một lần nữa, đã không kiểm tra và chắc chắn nếu nó sẽ làm việc, nhưng nếu không phải là danh sách cung cấp tùy chọn tiềm năng khác. HTH.

1

Trích dẫn từ trang web của apple.https://support.apple.com/kb/ph21413?locale=en_US

trang web không thể sửa đổi thông tin được lưu trữ trên thiết bị của bạn, vì vậy dịch vụ thường có sẵn tại các địa điểm như vậy có thể làm việc khác nhau cho đến khi bạn bật tắt Private Browsing

Vì vậy, lưu trữ một biến kiểm tra, thay đổi giá trị của nó, sau đó đọc biến kiểm tra. Nếu bạn nhận được một ngoại lệ, không thể tìm thấy biến, giá trị không thay đổi hoặc bạn nhận được giá trị null/undefined, chúng có nhiều khả năng ở chế độ riêng tư.

Hoặc, trong duyệt web riêng tư, bạn không có lịch sử tìm kiếm được lưu trữ có thể truy cập. Vì vậy, chuyển hướng đến một trang mới trong trang web của bạn khi khởi động và sau đó kiểm tra xem bạn có bất kỳ lịch sử trước nào không. Nếu không và thực tế là bạn đang nhận được một Do Not Track nhiều khả năng có nghĩa là bạn đang ở chế độ riêng tư trên safari.

Xin lưu ý rằng tôi chưa thử nghiệm điều này. Điều này dựa trên thông tin do Apple cung cấp trong liên kết ở trên.

0

tôi tìm một giải pháp ở đây:

https://gist.github.com/cou929/7973956#gistcomment-2272103

var isPrivate = false; 
try { 
    window.openDatabase(null, null, null, null); 
} catch (_) { 
    isPrivate = true; 
} 
alert((isPrivate ? 'You\'re' : 'You aren\'t') + ' in private browsing mode'); 

Hy vọng nó sẽ giúp :)

0

Thing mà tôi nhận ra là Safari ném một "vượt quá giới hạn" lỗi trong chế độ tư nhân. Vì vậy, đây là những gì tôi đã làm!

isPrivateMode: function() { 
    if (localStorage.length === 0) { 
    try { 
     localStorage.setItem('isLocalStorageAvaialble', 'That is being tested!'); 
     localStorage.removeItem('isLocalStorageAvaialble'); 
     return false; 
    } catch (e) { 
     return true; 
    } 
    } 
} 

Kiểm tra chiều dài của localStorage là quan trọng đối với sự thật rằng, nếu bạn đang cố gắng phương pháp này trên một trình duyệt hỗ trợ localStorage, nhưng là đầy đủ, bạn vẫn sẽ nhận được "vượt quá giới hạn" lỗi. Ở chế độ riêng tư, độ dài của localStorage luôn là 0.

Hy vọng điều này sẽ hữu ích!

Các vấn đề liên quan