2010-04-13 6 views
7

Tôi đã làm việc với jQuery gần đây và chạy vào một vấn đề mà tôi không thể bao gồm nó trong một usercript vì XmlHttpRequest sử dụng same origin policy. Sau khi thử nghiệm thêm, tôi thấy rằng hầu hết các trình duyệt cũng hỗ trợ kiểm soát truy cập Cross-Origin Resource Sharing được xác định bởi W3C như một giải pháp cho các vấn đề có cùng chính sách gốc. Tôi đã thử nghiệm điều này bằng cách lưu trữ kịch bản lệnh jQuery trên máy chủ web cục bộ bao gồm tiêu đề http: Access-Control-Allow-Origin: * http, cho phép tập lệnh được tải xuống bằng cách sử dụng XmlHttpRequest để nó có thể được bao gồm trong người dùng của tôi. Tôi muốn sử dụng phiên bản được lưu trữ của jQuery khi phát hành tập lệnh, nhưng cho đến nay thử nghiệm với các công cụ như http://www.seoconsultants.com/tools/headers Tôi chưa tìm thấy bất kỳ trang web nào cho phép truy cập nguồn gốc chéo vào tập lệnh jQuery. Dưới đây là danh sách tôi đã thử nghiệm cho đến nay:Bất kỳ phiên bản được lưu trữ nào của jQuery có tiêu đề 'Access-Control-Allow-Origin: *' được đặt?

Có bất kỳ phiên bản lưu trữ khác của jQuery mà làm phép truy cập nguồn gốc chéo? Tôi biết rằng jQuery thường được tải thông qua một thẻ script (đôi khi một thẻ script được tạo động), nhưng trong trường hợp cụ thể này, tôi phải sử dụng XmlHttpRequest và Eval để đảm bảo nó được tải vào đúng phạm vi. Google Chrome hỗ trợ tập lệnh người dùng nhưng không hỗ trợ @require, có nghĩa là cách duy nhất để sử dụng jquery in a user script in Google Chrome là nhúng tệp đó vào tệp .user.js hoặc tải và đánh giá nó qua XmlHttpRequest. Nhúng là một giải pháp ít hơn tối ưu và trong khi Tiện ích mở rộng của Chrome cho phép bạn bao gồm các tệp js jQuery trong tiện ích, tôi muốn gắn bó với các tập lệnh người dùng vì chúng đơn giản hơn nhiều và có thể hoạt động không chỉ trên một trình duyệt. Tôi đã gửi vé với cả hai đội Google Ajax APIsjQuery để cho phép quyền truy cập tên miền chéo vào CDN, nhưng tôi đoán là tôi sẽ chỉ cần lưu trữ vé đó ngay bây giờ.

+0

Tại sao bạn cần phải nhập khẩu jQuery qua XMLHttpRequest? Tại sao không chỉ tạo một thẻ script cho nó? – Pointy

+0

@Pointy Tôi đã cập nhật câu hỏi với nhiều thông tin hơn, nhưng câu chuyện dài là tôi đang cố tạo một kịch bản người dùng bằng jQuery hoạt động trên cả Google Chrome và Firefox. –

+0

Thành thật mà nói, Có một số lần sử dụng lưu trữ của riêng bạn là một kế hoạch trò chơi tốt: có vẻ như đây là một trong số đó. Chỉ cần chắc chắn rằng nó tốt và được lưu trữ, nó không giống như jQuery là một tập tin khổng lồ. –

Trả lời

2

Vì bạn đã đặt câu hỏi này, CDN của Google đã thêm các tiêu đề này theo yêu cầu. Một GET nhanh https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js mang tiêu đề:

access-control-allow-origin:* 

Vì vậy, thêm một thẻ script như thế này và bạn tốt để đi:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" crossorigin="anonymous" type="text/javascript"></script> 
2

Tôi đã gặp sự cố tương tự này và giải pháp của tôi đã kết thúc là tự lưu trữ tệp. Với lưu trữ của riêng tôi, tôi có thể cho phép yêu cầu miền chéo cho tập lệnh jQuery.

Tôi đã cố gắng vượt qua rất nhiều vòng để giải quyết vấn đề này và dành quá nhiều giờ để tìm kiếm và thử các máy chủ tập lệnh cho phép truy cập miền chéo. Cuối cùng, mặc dù, tôi đi đến kết luận rằng nếu tôi sẽ dựa vào một số phiên bản được lưu trữ không xác định của kịch bản, tôi cũng có thể lưu trữ nó bản thân mình, bởi vì tôi tin tưởng bản thân mình nhiều hơn các máy chủ tôi đã xem xét.

2

Amazon Cloudfront cho phép bạn đặt tiêu đề Access-Control-Allow-Origin. Về cơ bản, nếu bạn lưu trữ jQuery mình sau đó dính vào một CloudFront CDN ở phía trước của nó, CloudFront sẽ chuyển tiếp bất kỳ tiêu đề bạn thiết lập trở lại cho khách hàng:

your jQuery -> Cloudfront jQuery -> Client Browser 
[header set] [header set]   [header set] 

Các CloudFront CDN được thiết lập cho mỗi Amazon người sử dụng; những bất lợi của điều này so với nói rằng các API Google được lưu trữ là khách truy cập lần đầu vào trang web của bạn sẽ không tải lên jQuery bằng cách truy cập một trang web khác (và do đó được hưởng lợi từ bộ nhớ đệm.)