Khi tôi cố gắng này:
window.location.href = "file:///C:/Users/Cerbrus/Documents/SomeFile.js"
(Vâng, đó là một đường dẫn hợp lệ.)
Chrome ném cho tôi lỗi này:
Not allowed to load local resource: file:///C:/Users//Documents/File.js
Đây là vì JavaScript không có quyền truy cập vào địa phương tệp (do nó được sandbox), và bạn đang thiết lập url mới bằng JavaScript.
"SandBoxed" có nghĩa là một công nghệ đã hạn chế (hoặc không) truy cập bên ngoài một tập hợp giới hạn nhất định. Trong trường hợp trình duyệt, điều này có nghĩa là mã chạy trên trang không thể truy cập các tệp trên hệ thống của bạn (Nếu không, sẽ dễ dàng "ăn cắp" dữ liệu, bằng cách chỉ xem xét hệ thống tệp của người dùng).
Tuy nhiên,
Nói, tôi có 2 file:
C:/Test/Test.htm
C:/Test/Test1.htm
Test.htm
chỉ chứa này:
<script>
window.location = "file:///C:/Test/Test1.htm";
</script>
Điều này sẽ thực sự chuyển hướng đến Test1.htm
, vì các tập tin mục tiêu là trên cùng một tên miền với vị trí của tệp nguồn.
(Sidenote: Tôi không hoàn toàn bị thuyết phục rằng "[Chính sách gốc tương tự] (https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript)" không đóng vai trò ở đây, vì chúng tôi ' cũng đang thay đổi giao thức thành 'tệp:'.) – Cerbrus
Câu trả lời thú vị! Vì vậy, kịch bản không hoạt động từ một trang web lưu trữ nhưng nó hoạt động từ một tập tin htm địa phương. Nhưng làm thế nào về bookmarklets? Tôi cần kịch bản của tôi trong một bookmarklet. Đã không làm việc cho tôi nhưng Bookmarlkets là địa phương, lý do cho điều đó là gì? Và nhờ những người khác cũng trả lời. – BearCode
Điều đó dường như không hoạt động, hoặc là @BearBear: 'javascript: (function() {window.location =" file: /// C: /Test/Test1.htm ";}());' < - Điều đó cho cùng một lỗi. Tôi đoán ví dụ 'Test.htm' mà tôi đã đề cập đến, vì tệp nguồn đã có sẵn cục bộ, do đó, tệp'::/ 'được bao gồm trong hộp cát. –
Cerbrus