2012-05-16 29 views
11

Vì mục đích phát triển, tôi muốn có thể dễ dàng tải các tập lệnh được lưu trữ cục bộ vào trình duyệt thay vì phải sao chép-dán vào bảng điều khiển.Có cách nào để tải tệp JS cục bộ không?

Tạo phần tử <script> mới không hoạt động, lỗi này cung cấp lỗi Not allowed to load local resource: file://.... (trong Chrome).

Ngoài ra, việc tạo một người dùng sẽ không hoạt động - tôi phải cài đặt lại nó mỗi khi tôi thực hiện chỉnh sửa.

Có cách nào khác để dễ dàng tải tập lệnh cục bộ qua dấu trang/etc không?

+1

Nếu chúng tôi được phép chi nhánh bên ngoài JavaScript và trình duyệt, tại đây, có thể phục vụ tập lệnh của bạn trên máy chủ cục bộ (có thể bạn đang phát triển địa phương)? Bạn có thể khởi động một máy chủ cục bộ với một dòng Python. – cheeken

+0

@cheeken: Vâng, đó thực sự là một ý tưởng tốt .. Tôi _do_ đã cài đặt Apache, và tôi anyway làm phát triển của tôi trong thư mục Apache, vì vậy đó là một lựa chọn tuyệt vời! – Manishearth

Trả lời

24

Trong Chrome, bạn có thể tạo một phần mở rộng chứa tất cả của các tệp cục bộ mà bạn cần tải. Nó sẽ làm cho tập tin của bạn truy cập qua chrome-extension://... thay vì file://...

Tạo một file có tên manifest.json trong một thư mục mới và điền nó với:

{ 
    "name": "File holder", 
    "manifest_version": 2, 
    "version": "1.0", 
    "web_accessible_resources": ["test.js", "other.js", "yetanother.js"] 
} 

Sau đó, đặt tất cả các kịch bản bạn muốn tải ở chỗ thư mục mới và đảm bảo chúng được bao gồm trong danh sách kê khai web_accessbile_reources. Tải tiện ích mở rộng bằng cách truy cập chrome://extensions, bật Developer Mode và chọn thư mục mới với Load unpacked extension....

Giờ đây, bạn có thể truy cập tất cả các tệp trong thư mục tiện ích của mình bằng cách sử dụng chrome-extension://[app_id]/[file_name], trong đó "app_id" là băm được liệt kê cho tiện ích mở rộng trên trang chrome://extensions. Lưu ý rằng vì các giao thức và tên máy chủ khác với nơi bạn đã thực hiện công việc thực tế của mình (trừ khi bạn quyết định thực hiện tất cả sự phát triển của mình trong thư mục tiện ích mở rộng có thể chấp nhận được), tài nguyên tiện ích mở rộng là tên miền chéo và chỉ có thể được tải qua thẻ <script>.

Bây giờ từ giao diện điều khiển, bạn có thể làm:

var s = document.createElement("script"); 
s.src = "chrome-extension://aefigdoelbemgaedgkcjpcnilbgagpcn/test.js"; 
document.body.appendChild(s); 

(Giả sử tập tin của bạn là test.js và id ứng dụng của bạn là aefigdoelbemgaedgkcjpcnilbgagpcn.)

Đó là một chút khá gõ, tôi biết, nhưng có lẽ bạn có thể lưu trữ phần chrome-extension://[app_id] dưới dạng biến viết tắt?

+0

Tôi đã thử làm điều này với Chrome 22 và hiển thị cảnh báo rằng hỗ trợ phiên bản 1 đã bị loại bỏ. Tài liệu về các thay đổi trong v2 bao gồm "Tài nguyên của gói không còn có sẵn theo mặc định cho các trang web bên ngoài (dưới dạng src của hình ảnh hoặc thẻ tập lệnh).Nếu bạn muốn một trang web có thể tải một tài nguyên chứa trong gói của mình, bạn sẽ cần phải đưa vào danh sách trắng một cách rõ ràng thông qua thuộc tính tệp kê khai web_accessible_resources. Điều này đặc biệt phù hợp với các tiện ích mở rộng xây dựng giao diện trên trang web thông qua các tập lệnh nội dung được nhúng. "Tôi nghi ngờ chúng tôi cần điều này. – Barmar

+0

Khi tôi tải tệp tập lệnh, tôi làm cách nào để sử dụng tệp đó? Tệp .js của tôi chứa một đầu định nghĩa chức năng -velvel, nhưng khi tôi cố gắng gọi nó trong bảng điều khiển Javascript nó nói nó không được định nghĩa – Barmar

+0

@Barmar: Câu trả lời này được viết trước khi bản kê khai phiên bản 2 được sử dụng rộng rãi. – apsillers

-1

Các bạn đã thử một đường dẫn tương đối từ trang của bạn để js tập tin liek của bạn như vậy ...

src = '/ js/javascript.js'

+0

Sẽ không hoạt động, tôi đang phát triển một bản ghi người dùng - nếu không, tại sao tôi phải sao chép-dán vào bảng điều khiển ngay từ đầu? – Manishearth

1

Đáng buồn thay, Chrome doesn't allow you to load local files via AJAX; tuy nhiên, bạn có thể giải quyết giới hạn này bằng cách khởi chạy trình duyệt với cờ --disable-web-security (chi tiết thay đổi theo từng hệ điều hành máy chủ).

+5

Thay vào đó, tôi có thể đề xuất '--allow-file-access-from-files'? Điều đó sẽ cho phép tất cả các tính năng bảo mật Web khác có hiệu lực và (tôi tin) vẫn đạt được kết quả mong muốn. – apsillers

+0

Tìm kiếm thú vị nhưng [câu trả lời SO này] (http://stackoverflow.com/a/4271569/244128) nêu lên một số lo ngại về tính hiệu quả của tính năng đó dựa trên [vấn đề nổi bật] của nó (http://code.google.com/p/chromium/issues/detail? id = 4197 & có thể = 1 & q = cho phép-file-access-from-files & colspec = ID% 20Stars% 20Pri% 20Area% 20Feature% 20Type% 20Status% 20Summary% 20Modified% 20Owner% 20Mstone% 20OS). – maerics

+0

Những gì tôi không nhận được là bằng cách nào đó $ .getScript hoạt động. – njzk2

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