2012-02-11 25 views
15

Tôi đã chơi xung quanh với một số phần mở rộng chrome và tôi thấy ví dụ này: http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/Làm cách nào để làm cho page_action xuất hiện cho các trang cụ thể?

Tất cả mọi thứ hoạt động tốt, nhưng tôi muốn tạo ra phần mở rộng của riêng tôi và tôi muốn xem page_action Biểu tượng trên một trang web cụ thể, chứ không phải với ' g 'trong url của họ. Vì vậy, tôi cố gắng chỉ đơn giản là thay đổi kịch bản từ này:

// Copyright (c) 2011 The Chromium Authors. All rights reserved. 
// Use of this source code is governed by a BSD-style license that can be 
// found in the LICENSE file. 

// Called when the url of a tab changes. 
function checkForValidUrl(tabId, changeInfo, tab) { 
// If the letter 'g' is found in the tab's URL... 
if (tab.url.indexOf('g') > -1) { 
// ... show the page action. 
chrome.pageAction.show(tabId); 
} 
}; 

// Listen for any changes to the URL of any tab. 
chrome.tabs.onUpdated.addListener(checkForValidUrl); 

Into này:

chrome.pageAction.show(tabId); 

Nhưng bây giờ nó không hoạt động ... Tôi không nhận được nó. Rõ ràng tôi có thể sử dụng một cách giải quyết khác, nhưng đó không phải là vấn đề ... Trước tiên, tôi phải tạo một trang nền để làm điều này? Tôi nghĩ có nhưng tôi không thể thấy tại sao, và tại sao phương thức .show không hoạt động một mình? Tôi đã cố gắng tìm kiếm tài liệu và nội dung trên google nhưng tôi không thể tìm thấy bất kỳ thứ gì hữu ích mà tôi không có chuyên gia và đây là buổi chiều đầu tiên của tôi dành cho tiện ích mở rộng của google, nhưng làm cách nào tôi biết rằng "chrome.page.show (tabId) "phải đi trong một trang nền nếu nó không được viết ở bất kỳ đâu? Không có ý định chỉ trích, nhưng làm sao mà các bạn tìm ra được? Tất cả các phương pháp chrome phải đi trong một trang nền? Vâng, chắc chắn nhiều câu hỏi hơn sau đó những gì hợp pháp của nó. Hy vọng bạn có thể cho tôi ít nhất một câu trả lời!

+0

Bạn có cho nó 'tabId' hợp lệ không? – abraham

Trả lời

28

http://code.google.com/chrome/extensions/pageAction.html
... nói ...

Theo mặc định, một hành động trang bị ẩn. Khi bạn hiển thị nó, bạn chỉ định tab trong đó biểu tượng sẽ xuất hiện. Biểu tượng vẫn hiển thị cho đến khi tab bị đóng hoặc bắt đầu hiển thị một URL khác (vì ví dụ: người dùng nhấp vào liên kết).

Vì vậy, ngay cả khi tabid của bạn hợp lệ, nó sẽ biến mất khá nhanh khi bạn chỉ chạy chrome.pageAction.show(tabId); một lần khi trang nền chạy trước tiên.
Bạn cần phải kiểm tra các thay đổi đối với các tab trong nền liên tục vì các pageactions không có các cài đặt match/exclude_matches trong tệp kê khai như tập lệnh nội dung làm (đáng tiếc). Vì vậy, bạn phải tự kiểm tra và trả lời các thay đổi.
Nếu bạn muốn nó làm việc cho một trang web cụ thể chỉ cần thay đổi nó một cái gì đó giống như ...

// Copyright (c) 2011 The Chromium Authors. All rights reserved. 
// Use of this source code is governed by a BSD-style license that can be 
// found in the LICENSE file. 

// Called when the url of a tab changes. 
function checkForValidUrl(tabId, changeInfo, tab) { 
// If the tabs url starts with "http://specificsite.com"... 
if (tab.url.indexOf('http://specificsite.com') == 0) { 
// ... show the page action. 
chrome.pageAction.show(tabId); 
} 
}; 

// Listen for any changes to the URL of any tab. 
chrome.tabs.onUpdated.addListener(checkForValidUrl); 
+0

OK, cảm ơn bạn rất nhiều. Tôi đọc đoạn văn đó bạn trích dẫn, nhưng dường như tôi không hiểu nó lắm! – Treferwynd

+0

Mmh, bạn cũng có thể trả lời câu hỏi này: Giả sử bg.js là tệp chứa (và chỉ chứa ** **) mã tôi trích dẫn (hoặc mã bạn trích dẫn). Tại sao nếu tôi viết điều này: trong background.html nó hoạt động, nhưng nếu tôi cố gắng viết mã trực tiếp trong background.html thì không? – Treferwynd

+4

Tôi đoán là bạn có '" manifest_version ": 2' trong tệp kê khai của mình, điều này sẽ không cho phép nội tuyến ' trong background.html hoặc xóa '" manifest_version ": 2' trong tệp kê khai của bạn hoặc thay đổi phần nền của tệp kê khai quá' "nền: {"scripts": ["bg.js"]} '... không biết bạn có thể làm cái cuối cùng cho đến bây giờ. – PAEz

1

Đối với những người tìm kiếm một cách để xử lý các tên miền phụ, nếu bạn có một trang web với tên miền phụ như viết blog .specificsite.com, hoặc cần phải sử dụng ký tự đại diện, bạn cũng có thể sử dụng regex ở định dạng này

function checkForValidUrl(tabId, changeInfo, tab) 
{ 
    if(typeof tab != "undefined" && typeof tab != "null") 
    { 
     // If the tabs URL contains "specificsite.com"... 
     //This would work in the same way as *specificsite.com*, with 0 or more characters surrounding the URL. 
     if (/specificsite[.]com/.test(tab.url)) 
     { 
      // ... show the page action. 
      chrome.pageAction.show(tabId); 
     } 
    } 
}; 

// Listen for any changes to the URL of any tab. 
chrome.tabs.onUpdated.addListener(checkForValidUrl); 

để phù hợp với chuỗi con trong URL. Nó cũng giúp với tính toán để thực hiện một kiểm tra null/undefined để tránh xử lý ngoại lệ bổ sung.

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