Tôi đang phát triển tiện ích cho trình duyệt Google Chrome. Tôi không thể tìm ra cách truy cập đối tượng DOM tab hiện tại từ trang "popup.html". bất kỳ đề xuất nào?Truy cập đối tượng DOM tab hiện tại từ "popup.html"?
Trả lời
Theo mặc định, trong popup.js/popup.html, đối tượng "tài liệu" chỉ đề cập đến tài liệu của cửa sổ bật lên của tiện ích. Để có được DOM cho một tab cụ thể (ví dụ như tab hiện đang hoạt động), bạn sẽ cần sử dụng content scripts communications. Ví dụ chúng ta cần phải gửi một yêu cầu từ extension để kịch bản nội dung của bạn qua popup, vì vậy trong popup.html bạn làm điều gì đó như thế này:
chrome.tabs.getSelected(null, function(tab) {
// Send a request to the content script.
chrome.tabs.sendRequest(tab.id, {action: "getDOM"}, function(response) {
console.log(response.dom);
});
});
Bây giờ trong kịch bản nội dung, chúng ta cần phải listen for those events đến từ phần mở rộng, vì vậy trong một số tệp chúng tôi đặt tên là dom.js
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.action == "getDOM")
sendResponse({dom: "The dom that you want to get"});
else
sendResponse({}); // Send nothing..
});
Bây giờ hãy nhớ thiết lập số manifest để bao gồm tập lệnh nội dung và quyền tab.
Câu trả lời này dường như không hoạt động với API mới nhất. Đây là một ví dụ làm việc.
popup.js:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var tab = tabs[0];
console.log(tab.url, tab.title);
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(msg) {
msg = msg || {};
console.log('onResponse', msg.farewell);
});
});
});
getDescription.js:
window.onload = function() {
chrome.runtime.onMessage.addListener(function(msg, _, sendResponse) {
console.log('onMessage', msg);
if (msg.greeting == "hello") {
sendResponse({farewell: "goodbye"});
} else{
sendResponse({});
}
});
};
phần liên quan của manifest.json:
{
"permissions": [
"tabs"
],
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["getDescription.js"]
}
]
}
Đây là việc sửa chữa mới nhất:
popup.js
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
});
});
(Lưu ý: console.log trên (response.farewell) là dành cho popup.html, không tab hiện tại của bạn)
contentscript.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
});
- 1. Truy cập đối tượng DOM sau khi gọi AJAX?
- 2. Truy cập đối tượng DOM của cửa sổ mẹ từ jQuery DOMWindow được tải bằng iFrame
- 3. Truy cập đối tượng GridViewColumnHeader từ GridViewColumn
- 4. Phát hiện đối tượng DOM và đối tượng jQuery
- 5. Đối tượng JavaScript DOM đối tượng jQuery
- 6. Tại sao _ViewStart.cshtml không thể truy cập đối tượng ViewBag?
- 7. Truy cập "lớp hiện tại" từ tùy chỉnh WPF MarkupExtension
- 8. javascript đối tượng truy cập hiệu suất
- 9. Truy cập biến tĩnh từ đối tượng trong Java
- 10. Cách truy cập một đối tượng từ một lớp khác?
- 11. Đối tượng lưu trữ truy cập từ lớp T4
- 12. Truy cập các trường từ đối tượng proxy
- 13. Truy cập tab IE khi tạo
- 14. Cách truy cập đối tượng HttpRequestMessage hiện tại trên toàn cầu?
- 15. Đối tượng Flash nhúng có thể truy cập DOM của tài liệu gốc của nó không?
- 16. Truy cập đối tượng khởi tạo XAML từ C#
- 17. Truy cập đối tượng lớp Kotlin từ Java
- 18. Truy cập các đối tượng từ một quy trình khác
- 19. Truy cập các trường đối tượng scala từ java
- 20. Cách tạo liên kết popup.html mở trong tab?
- 21. Tại sao một số đối tượng không thể truy cập từ các chủ đề khác nhau?
- 22. Tiện ích mở rộng của Google Chrome - Truy cập DOM
- 23. Cách truy xuất đối tượng Phiên làm việc NHibernate hiện tại từ Castle ActiveRecord SessionScope
- 24. Đối tượng truy cập dữ liệu PHP
- 25. Truy cập một phương pháp đối tượng với cành
- 26. Cách truy cập thuộc tính Identity ID đối tượng
- 27. Truy cập bị từ chối mạo danh thư mục mạng truy cập người dùng hiện tại
- 28. Truy cập jQuery đối tượng JSON
- 29. tạo đối tượng JQuery bằng cách truyền đối tượng DOM?
- 30. jQuery so sánh hai đối tượng DOM?
Ý tôi là với DOM là Mô hình đối tượng tài liệu ... cảm ơn –
Có, những gì tôi đã cho bạn thấy trong ví dụ của tôi là nhắn tin đồng bộ được thực hiện trong Tiện ích mở rộng của Chrome. Tôi đã trả về một chuỗi "The dom mà bạn muốn nhận được", nhưng trên thực tế, bạn có thể trả về bất kỳ DOM nào bạn muốn. Nếu bạn muốn nhận mọi thứ trong cơ thể, bạn có thể thực hiện "sendResponse ({dom: document.getElementsByTagName (" body ") [0]});" –
ví dụ trên có hoạt động không? AFAIK gửi phản ứng sẽ tuần tự hóa các dom như json mà có khả năng dẫn đến một lỗi do cấu trúc tròn của đối tượng dom. –