2010-05-04 26 views
28

Tôi đang cố gắng thực hiện một tiện ích Chrome đơn giản nhưng đang gặp sự cố với việc cung cấp giá trị cho mảng matches trong số content_scripts của mình.Tệp kê khai tiện ích mở rộng 'Kết quả phù hợp'

{ 
    "name": "My Extension", 
    "version": "1.0", 
    "description": "My Extension Experiment", 
    "browser_action": { 
    "default_icon": "icon.png", 
    "default_title": "Ext", 
    "default_popup": "popup.html" 
    }, 
    "content_scripts": { 
    "matches": ["http://*"], 
    "js": ["scripts.js"] 
    } 
} 

Khi tôi cố gắng để tải phần mở rộng này vào Chrome, tôi nhận được thông báo sau:

Không thể tải phần mở rộng từ 'C: \ Users \ foo \ Desktop \ Extensions \ bar'.
Giá trị không hợp lệ cho 'content_scripts'.

Tôi không thể thấy "không hợp lệ" về giá trị của mình là gì. Những gì tôi đang cố gắng làm là phù hợp với mọi URL, vì vậy phần mở rộng của tôi có thể thao tác DOM (thông qua javascript trong scripts.js) của bất kỳ trang nào mà nó đang chạy. Tôi có bỏ lỡ điều gì đó, hay không, hay chuyện gì?

cập nhật

Sau khi đăng câu hỏi này, tôi đã thông báo rằng ví dụ Google là hơi khác so với tôi, vì vậy tôi sửa đổi mã của tôi một chút để phản ánh cú pháp của họ:

"content_scripts": [{ 
    "matches": ["http://*"], 
    "js": ["scripts.js"] 
}] 

Đó là cho biết, tôi vẫn gặp lỗi sau khi cố gắng tải tiện ích mở rộng của mình:

Không thể tải phần mở rộng từ 'C: \ Users \ foo \ Desktop \ Ex căng thẳng \ bar '.
Giá trị không hợp lệ cho 'content_scripts [0] .matches [0]'.

+0

Tôi đã nhận được lỗi tương tự nhưng tôi không viết '' khớp với khóa ''. nơi tôi thấy tài liệu dành cho nhà phát triển Chrome là trường bắt buộc khi tạo 'content_scripts' – diEcho

Trả lời

45

Bạn cần phải đưa giá trị của lĩnh vực content_scripts trong dấu ngoặc vuông:

"content_scripts": [ { 
    "matches": ["http://*"], 
    "js": ["scripts.js"] 
} ] 

(thấy Chrome Docs để biết thêm)

Ngẫu nhiên, sử dụng http://*/* sẽ là một trận đấu tốt hơn cho tất cả url (xem docs), thêm https://*/* nếu bạn cũng cần phải khớp với các url đó.

Edit:

Sau chỉnh sửa của bạn, lỗi mà bạn đang nhận được là do tính chất trận đấu là không chính xác.

+0

Tôi đã thấy mẫu' http: // */* 'nhưng lo lắng rằng điều này sẽ yêu cầu url phải có'/'sau' http: // 'để tiện ích của tôi chạy. Điều này có đúng không? – Aristotle

+0

Trang tài liệu về đối sánh mẫu (http://code.google.com/chrome/extensions/match_patterns.html) giải thích chi tiết. Tất cả các phần mở rộng mà tôi đã thấy sử dụng mẫu 'http: // */*' không có vấn đề gì. – adrianbanks

+0

Có. Tôi đã thấy trang này chỉ trong giây lát trước khi đặt câu hỏi của tôi. Nhưng ví dụ của họ cho thấy 'http: // */*' là khớp với 'http: // www.google.com /' khiến tôi tin rằng url phải có dấu xuyệt sau khi được liên kết với 'http: // 'để gọi logic mở rộng của tôi. – Aristotle

34

Nếu bạn muốn kết hợp tất cả các URL, sau đó Google có một mô hình đặc biệt chỉ dành riêng cho mục đích này: <all_urls>

mẫu sử dụng:

"matches": ["<all_urls>"], 

Xem trang này để biết thêm: https://developer.chrome.com/extensions/match_patterns

+2

Rất tuyệt, tôi chưa biết về điều đó. Tuy nhiên, đối với những người tìm kiếm tài liệu có liên quan, liên kết thực sự là: http://code.google.com/chrome/extensions/match_patterns.html – npdoty

+2

Tất cả các liên kết đến code.google.com trong câu trả lời đã chọn và tất cả nhận xét trước câu trả lời này bị hỏng sau một trang web reorg. Tôi đã tự sửa câu trả lời đã chọn bằng các liên kết hoạt động. – ack

2

Đối với nhiều người đang gặp lỗi liên quan đến:

'content_scripts[0].matches' is missing or invalid. 

hoặc

'content_scripts[0].matches[0]': Empty path. 

Đang cố gắng điền vào, hoặc tạo, lĩnh vực trận đấu với URL cụ thể của bạn cần. Nếu bạn muốn sử dụng tất cả các URL, hãy sử dụng thẻ <all_urls> như dưới đây.

"content_scripts": [ 
     { 
      "matches": ["<all_urls>"], 
      "js": [ "jquery.js" ] 
     } 
    ] 

Các tệp được liệt kê trong mảng "js" có đường dẫn tương ứng với ứng dụng của bạn. Nói cách khác, vị trí của "manifest.json" là thư mục gốc của bạn.

Lưu ý: jquery.js là một tệp trong thư mục của dự án của tôi và bạn nên thay thế tệp đó bằng bất kỳ tệp tập lệnh nào bạn muốn.

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