2013-05-06 17 views
5

Tôi sử dụng đối sánh để hạn chế tập lệnh của tôi chỉ hoạt động một miền nhưng chrome chạy nó trong mọi miền. Tôi đã thử @include@match và thông báo "Truy cập dữ liệu của bạn trên tất cả các trang web" khi tôi cố gắng cài đặt và chạy nó trong tất cả các trang web.Số lần sao chép người dùng Chrome trên tất cả các trang mặc dù @match và @include settings

Làm cách nào để hạn chế usercript thành một tên miền trong chrome?

Metadata là giống như trang này: http://www.chromium.org/developers/design-documents/user-scripts

Tôi có nghĩa là nó:

// @match http://*.google.com/* 
// @match http://www.google.com/* 
+0

Bạn đang cố gắng cài đặt tệp zip/crx hoặc tệp '.user.js'? –

+0

tôi đã nói usercript vì vậy nó là .user.js – Leadri

+0

Chrome chuyển đổi tập lệnh người dùng thành tiện ích mở rộng của Chrome gốc với mẫu đối sánh tương đương với '', sau đó hạn chế các trang bằng cách thông qua '" include_globs "'. Đừng lo lắng về cảnh báo, nó hoạt động như bạn mong đợi. Nếu bạn muốn nhận cảnh báo ít đáng sợ hơn, bạn cần phải tạo tiện ích mở rộng của Chrome từ tập lệnh người dùng và chỉnh sửa phần "content_scripts" 'của tệp' manifest.json'. Xem [câu trả lời này] (http://stackoverflow.com/questions/11772308/keep-same-id-when-converting-from-userscript-in-chrome/11773654#11773654) để biết các bước tạo tiện ích mở rộng của Chrome từ kịch bản người dùng. –

Trả lời

6

Lưu ý: câu trả lời này phát triển giữa OP và Rob W. Đặt nó đây với hy vọng rằng câu hỏi này có thể hữu ích cho những người khác mà không cần phải sàng lọc qua chuỗi nhận xét ở trên.


Có hai vấn đề này. Đầu tiên, a userscript header does not parse if a UTF8 BOM is present (lỗi Chromium 102667).

Thứ hai, khi sử dụng @include so với @match trong một bản ghi người dùng, Chrome báo cáo sai rằng tập lệnh có thể "Truy cập dữ liệu của bạn trên tất cả các trang web", nhưng điều này không thực sự đúng. Tập lệnh sẽ chỉ chạy trên các trang web được chỉ định bởi (các) câu lệnh include.

xem xét (hoặc làm) ba kịch bản:

kiểm tra UTF, không UTF.user.js (lưu với mã hóa ANSI):

// ==UserScript== 
// @name Not UTF source file 
// @match http://www.yahoo.com/* 
// ==/UserScript== 
if (location.hostname != 'www.yahoo.com') 
    alert ("This script should not run on "+location.hostname+"!"); 


kiểm tra UTF , là UTF.user.js (lưu bằng mã hóa UTF-8, bao gồm BOM):

// ==UserScript== 
// @name Is UTF source file 
// @match http://www.yahoo.com/* 
// ==/UserScript== 
if (location.hostname != 'www.yahoo.com') 
    alert ("This script should not run on "+location.hostname+"!"); 


Bao gồm, không match.user.js (lưu với mã hóa ANSI):

// ==UserScript== 
// @name Use include, not match 
// @include http://www.yahoo.com/* 
// ==/UserScript== 
if (location.hostname != 'www.yahoo.com') 
    alert ("This script should not run on "+location.hostname+"!"); 


Lưu ý rằng tất cả 3 kịch bản là cùng một mã. Chỉ có @name và/hoặc định dạng tệp và/hoặc @include so với @match khác nhau.


Kịch bản ANSI, với trận đấu (thử nghiệm UTF, không UTF.user.js) báo cáo các điều khoản:

ANSI plus match
kịch bản này hoạt động và báo cáo một cách chính xác, và như mong đợi.


Tập lệnh UTF-8, khớp với (Kiểm tra UTF, là UTF.user.js) báo cáo các điều khoản:

UTF plus match
Các điều khoản được báo cáo không đúng cách, trái ngược với @match statement (s). Cũng lưu ý rằng tên tệp được hiển thị, được mã hóa URL, thay vì chỉ thị @name. Đây là cả hai đầu mối rằng cái gì đó không ổn.

Tệ hơn, tập lệnh này sẽ hoạt động trên tất cả các trang web. Tức là, bạn sẽ thấy alert() trên tất cả các trang không phải của Yahoo. Điều này rõ ràng là a bug.


Kịch bản ANSI, với bao gồm (Bao gồm, không match.user.js) báo cáo các điều khoản:

ANSI plus include
Trong khi đây là một báo cáo sai lệch, kịch bản sẽ thực sự hoạt động một cách chính xác. Nghĩa là, nó sẽ chỉ kích hoạt các trang yahoo.

Điều này một phần là do Chrome tự động chuyển đổi người dùng thành các tiện ích. Câu hỏi @match được dịch trực tiếp sang thuộc tính's matches, trong khi tuyên bố @include được thực hiện thành include_globs giá trị. Xem Match patterns and globs. Các phím báo cáo quyền ra khỏi mảng matches.

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