2013-01-10 26 views
5

Tôi đang có một thời gian cố gắng lấy mã trong tập lệnh nội dung để nói chuyện với bảng điều khiển của mình. (Tiện ích mở rộng này thêm bảng điều khiển mới vào Công cụ dành cho nhà phát triển.) Từ tập lệnh nội dung của tôi, tôi có thể thực hiện việc này:kịch bản nội dung để devtools.js vào bảng điều khiển mới của tôi

chrome.extension.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

và tôi có thể lấy nó trong tập lệnh nền.

chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) { 
if (request.greeting == "hello") sendResponse({farewell: JSON.stringify(sender)}); 
}); 

Nhưng tôi cần thông báo của mình để được chọn trong devtools JS. Bằng cách đó tôi có thể nói chuyện với bảng điều khiển mà tôi đã thêm vào công cụ dev. Làm thế nào tôi có thể làm điều đó?

Trả lời

13

Để thiết lập kết nối giữa Devtools Page và nhiều trang content script, Background Page được sử dụng làm người hòa giải. Vì vậy, ý tưởng là có một kênh từ devtools đến background và từ background đến content scripts. Đây là một phương pháp chung cần thiết để xử lý bản chất biến của tập lệnh nội dung execution time.

Bạn có thể sử dụng tập lệnh sau làm tài liệu tham khảo để liên lạc giữa devtools.js đến content scripts.

manifest.json

đăng ký background, devtoolscontent scripts để biểu thị tập tin

{ 
    "name": "Inspected Windows Demo", 
    "description": "This demonstrates Inspected window API", 
    "devtools_page": "devtools.html", 
    "manifest_version": 2, 
    "version": "2", 
    "permissions": [ 
     "experimental", 
     "tabs" 
    ], 
    "background": { 
     "scripts": [ 
      "background.js" 
     ] 
    }, 
    "content_scripts": [ 
     { 
      "matches": [ 
       "<all_urls>" 
      ], 
      "js": [ 
       "myscript.js" 
      ] 
     } 
    ] 
} 

devtools.html

đăng ký devtools.js tuân thủ CSP

<html> 

    <head> 
     <script src="devtools.js"></script> 
    </head> 

    <body></body> 

</html> 

devtools.js

//Created a port with background page for continous message communication 
var port = chrome.extension.connect({ 
    name: "Sample Communication" //Given a Name 
}); 
//Posting message to background page 
port.postMessage("Request Tab Data"); 
//Hanlde response when recieved from background page 
port.onMessage.addListener(function (msg) { 
    console.log("Tab Data recieved is " + msg); 
}); 

myscript.js

//Handler request from background page 
chrome.extension.onMessage.addListener(function (message, sender) { 
    console.log("In content Script Message Recieved is " + message); 
    //Send needed information to background page 
    chrome.extension.sendMessage("My URL is" + window.location.origin); 
}); 

background.js

//Handle request from devtools 
chrome.extension.onConnect.addListener(function (port) { 
    port.onMessage.addListener(function (message) { 
     //Request a tab for sending needed information 
     chrome.tabs.query({ 
      "status": "complete", 
      "currentWindow": true, 
      "url": "http://www.google.co.in/" 
     }, function (tabs) { 

      for (tab in tabs) { 
       //Sending Message to content scripts 
       chrome.tabs.sendMessage(tabs[tab].id, message); 
      } 
     }); 

    }); 
    //Posting back to Devtools 
    chrome.extension.onMessage.addListener(function (message, sender) { 
     port.postMessage(message); 
    }); 
}); 

Output

Bạn có thể thấy http://www.google.co.in/ được nhận được trong devtools trang

Tài liệu tham khảo

Bạn có thể tham khảo các tài liệu sau đây để biết thêm thông tin.

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