2013-06-18 34 views
10

Đây là một câu hỏi kỳ lạ cụ thể.Bao gồm tập lệnh Greasemonkey trên nhiều tên miền

Tôi đang viết tập lệnh Greasemonkey chạy trên mười tên miền. Tất cả các trang web đều có cấu trúc giống nhau, nhưng tên miền của mỗi trang lại khác nhau. Ví dụ, kịch bản sẽ chạy trên:

http://first-domain.com/ 
http://another-one.com/ 
http://you-get-the-point.com/ 

Tôi cũng cần nó để chạy trên các trang khác trên khắp các lĩnh vực tương tự, vì vậy danh sách cho chỉ là một trong những lĩnh vực sẽ là một cái gì đó như:

http://first-domain.com/admin/edit/* 
http://first-domain.com/blog/* 
http://first-domain.com/user/*/history 

Rõ ràng nếu tôi bao gồm ba đường dẫn này cho tất cả mười tên miền, thì đó là 30 URL tôi cần liệt kê là @include s.

Vì vậy, tôi tự hỏi nếu có một cách để làm điều gì đó như:

// Obviously fake code: 

var list_of_sites = ["first-domain", "another-one", "you-get-the-point"]; 

@include http:// + list_of_sites[any] + .com/admin/edit/* 
@include http:// + list_of_sites[any] + .com/blog/* 
@include http:// + list_of_sites[any] + .com/user/*/history 

Nếu một cái gì đó như thế này có thể, nó sẽ cắt giảm danh sách các @include s từ 30 xuống còn 3.

Vì vậy, điều này có thể, hay tôi đang mơ?

P.S. Tôi biết tôi chỉ có thể @include http://first-domain.com/* và sau đó sử dụng câu lệnh if để chạy một số phần nhất định của tập lệnh trên một số đường dẫn nhất định trong miền đó, nhưng số trang mà tập lệnh được thiết kế để chạy trên chỉ chiếm khoảng 2% trang web. dường như lãng phí khi bao gồm tập lệnh trên mọi trang của mỗi trang web.

Trả lời

15

tham khảo:

Các giải pháp mà làm việc trên Greasemonkey (đó là Firefox), có thể khác trên Chrome và trên Tampermonkey.

Ba cách tiếp cận cơ bản:

  1. Sử dụng 30 khác nhau @include dòng: Trong khi điều này có thể khó chịu về mặt cắt và dán mã hóa, nó là một phương pháp mà sẽ làm việc các trình duyệt trên cùng và cái sẽ có hiệu suất trình duyệt tốt nhất. Các cách tiếp cận khác yêu cầu trình duyệt thực hiện (nhiều hơn) kiểm tra đối với mọi trang hoặc khung nội tuyến được truy cập.

  2. Dùng regex @include:

    @include /^http:\/\/(1stDomain\.com|2ndDomain\.com|3rdDomain\.net|etc.)\/(admin\/edit|blog|user\/.+?\/history)/ 
    

    Đây là một dòng, và thực hiện khá tốt, nhưng hàng có thể có khó sử dụng, và điều này sẽ chỉ làm việc trên Greasemonkey và Tampermonkey (và có lẽ Scriptish).

  3. Sử dụng kết hợp khác nhau của @match, @include@exclude: Tôi chỉ đề cập đến điều này như một khả năng. Đó là phương pháp hoạt động tốt nhất trên Chrome thẳng, nhưng không phải là trình duyệt chéo cho loại điều này. Đối với phương pháp tiếp cận sử dụng Greasemonkey hoặc Tampermonkey 1 hoặc phương pháp tiếp cận 2.

Tôi khuyên bạn nên tránh các ký tự đại diện hàng đầu càng nhiều càng tốt. Chúng làm chậm trình duyệt xuống nhiều nhất. EG, không sử dụng một cái gì đó như @include /^.+ .../, hoặc @include http:/*/* nếu bạn có thể tránh nó.

+1

Đẹp, điều này thật tuyệt vời! Phương pháp tiếp cận # 2 phù hợp với hoàn cảnh của tôi là tốt nhất, và giờ tôi đã hoàn thành nó. Đó là cho một tập lệnh riêng tư chỉ nhắm mục tiêu Greasemonkey và Tampermonkey, do đó khả năng tương thích là tốt. Bạn là huyền thoại! – blimpage

+0

Bạn được chào đón; rất vui được giúp đỡ. –

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