2013-08-22 14 views
8

Tôi có một phần mở rộng chrome, và từ trang nền của tôi, tôi mở một cửa sổ từ xa:Làm cách nào để chuyển dữ liệu từ cửa sổ từ xa sang trang nền của tiện ích mở rộng của Chrome?

chrome.windows.create({ 
     type : 'popup', 
     url : "https://www.example.com/mypage.html" 
    }, function(newWindow) { 

    }); 

Trên trang từ xa của tôi (https://www.example.com/mypage.html) Tôi đang chờ đợi người dùng thực hiện một hành động. Khi hành động này được thực hiện, tôi cần phải quay trở lại phần mở rộng của một số dữ liệu.

Làm thế nào tôi có thể làm điều này? Tôi không thể tìm thấy bất kỳ nội dung nào có liên quan trong tài liệu (http://developer.chrome.com/extensions/messaging.html)

+0

Sử dụng [tập lệnh nội dung] (https://developer.chrome.com/extensions/content_scripts.html) và [truyền qua thư] (https://developer.chrome.com/extensions/messaging.html). –

+0

@RobW thanks.Tried phần "Gửi tin nhắn từ trang web" nhưng tôi nhận được rằng "externally_connectable" yêu cầu kênh Google Chrome dev hoặc mới hơn và đây là kênh ổn định. ". Làm thế nào điều này có thể hoạt động? Thật kỳ lạ là tôi không thể tìm thấy một ví dụ hoàn chỉnh cho loại hình giao tiếp này, nếu bạn có một thông tin, nó sẽ được nhiều người đánh giá cao. – abinop

+1

http://stackoverflow.com/questions/10526995/can-a-site-invoke-a-browser-extension –

Trả lời

9

Về cơ bản, có thể. Điều bạn nên làm là sử dụng tập lệnh nội dung làm cầu nối giữa cửa sổ mới được tạo và tập lệnh nền của bạn. Ví dụ:

kịch bản nền của bạn:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { 
    alert("message received"); 
}); 
chrome.windows.create({ 
    type : 'popup', 
    url : "http://yoursite.com/page.html", 
    type: "popup" 
}, function(newWindow) { 

}); 

kịch bản Nội dung của bạn:

document.addEventListener("hello", function(data) { 
    chrome.runtime.sendMessage("test"); 
}) 

page.html:

<script> 
    var go = function() { 
     var event = document.createEvent('Event'); 
     event.initEvent('hello'); 
     document.dispatchEvent(event); 
    } 
</script> 
<a href="javascript:go();">Click me</a> 

Vì vậy, ý tưởng là để gửi một sự kiện từ trang bằng cách sử dụng đối tượng tài liệu. Kịch bản nội dung lắng nghe sự kiện đó và một khi xảy ra, gửi một thông báo tới kịch bản nền, nơi mã của bạn ban đầu.

0

Tôi tin rằng nhắn tin là không cần thiết cho những gì bạn đang làm. (Trừ khi tôi đang thiếu một cái gì đó.) Tôi đang thử nghiệm với việc tạo ra một phần mở rộng, và cần thiết để tạo ra một popup để truy vấn người dùng cho một số thông tin. Lúc đầu, tôi sử dụng tin nhắn, sau đó tôi đọc những trang sau đây:

http://developer.chrome.com/extensions/event_pages.html

Bao gồm một js trong trang html của bạn trong đó sử dụng một trong hai extension.getBackgroundPage hoặc runtime.getBackgroundPage [sử dụng sau này nếu bạn đang sử dụng một tổ chức phi trang nền -nhận xét] để xem kịch bản nền. Có thể dễ dàng gọi một chức năng trên trang nền của bạn như sau:

extension.getBackgroundPage(). SendDataOrWhateverYouCallIt (data);

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