2013-06-09 25 views
9

Về cơ bản, tôi đang cố gắng thực hiện một phần mở rộng nhỏ của chrome theo tài liệu của Google. Tôi muốn tiêm một tập lệnh mỗi khi nút mở rộng được nhấp. Đây là biểu hiện của tôi cho đến nay:Phương thức ExecuteScript

{ 
    "name": "Example", 
    "manifest_version": 2, 
    "version": "1.0", 
    "permissions": [ 
    "tabs" 
    ], 
    "description": "My Chrome extension.", 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
    "scripts": ["background.js"] 
    } 
} 

Và đây là background.js tôi:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {code: "content_script.js"}); 
}); 

Vấn đề là các content_script không bị sa thải, thậm chí cố gắng với một ví dụ đơn giản alert("aaa");

Bạn có thể cho tôi biết tôi đang làm gì sai không? Tôi không thể hiểu được.

Trả lời

12

Để thực thi tập lệnh nội dung trên một trang, bạn phải yêu cầu quyền lưu trữ chính xác trong tệp kê khai của mình.

Vì bạn muốn chèn tập lệnh nội dung khi nhấp vào nút tác vụ trình duyệt, nó đủ để yêu cầu activeTab permission. Hơn nữa, bạn có thể thả quyền tabs, để giảm số lượng permission warnings về không!

{ 
    "name": "Example", 
    "manifest_version": 2, 
    "version": "1.0", 
    "permissions": [ 
    "activeTab" 
    ], 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
    "scripts": ["background.js"] 
    } 
} 

(Việc cho phép activeTab đã introduced in Chrome 26. Nếu bạn cần hỗ trợ Chrome 25 trở về trước, thêm *://*/* hoặc <all_urls> quyền truy cập vào file manifest).

Lưu ý: Nếu bạn thêm một callback để chrome.tabs.executeScript, bạn sẽ nhận được một thông báo lỗi hữu ích trong chrome.runtime.lastError.message:

Không thể truy cập nội dung của url "http ....." mở rộng manifest phải yêu cầu quyền truy cập máy chủ này.

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, { 
     file: "content_script.js" 
    }, function() { 
     if (chrome.runtime.lastError) { 
      console.error(chrome.runtime.lastError.message); 
     } 
    }); 
}); 
+0

Có, điều này làm các trick và cũng cảm ơn bạn đã xử lý ngoại lệ. Phản ứng này rất đầy đủ. – fillobotto

+0

Không phải là "content_script.js" mà tôi được cho là có thể chỉnh sửa nội dung tab hiện tại không? Nó không có vẻ như vậy. Ví dụ tôi có thể truy xuất giá trị hộp văn bản nhưng không thể đặt giá trị đó. – fillobotto

+0

@fillobotto Bạn có thể đặt giá trị. Bạn có thể cho thấy những gì bạn đang cố gắng không? –

6

Ngoài sửa chữa Rob của bạn nên sử dụng {file: "content_script.js"}

+0

Được phát hiện tốt. Hiện tại 'content_scripts.js' được xem như là mã thay vì một tệp, bởi vì' "mã" 'đã được sử dụng thay vì' "tệp'" - xem ['chrome.tabs' # InjectDetails] (https://developer.chrome. com/extensions/tabs.html # type-InjectDetails) –