У меня есть iframe в popup.html с id = Receiver, который получает и отправляет сообщения.
Нижеприведенный код взят из popup.js:
self.port.on("show", function(title, url) {
myApp.initialize(title, url);
});
var arr = new Array();
var myApp = {
initialize: function (url,title){
arr = [];
arr.push(url);
arr.push(title);
var receiver = document.getElementById('Receiver').contentWindow;
receiver.postMessage(arr, "*");
},
sendDetails : function(){
alert("arr :"+arr);
},
closeIt : function(){
self.port.emit("close-it");
}
}
window.addEventListener("message" , receiveMessageOnce, false);
function receiveMessageOnce(event){
myApp.closeIt();
}
Код из main.js:
main_panel.on("show", function() {
main_panel.port.emit("show", UrlActiveTab, TitleActiveTab);
});
Теперь у меня есть 2 вопроса:
1.) Всякий раз, когда он получает сообщение, myApp.CloseIt() запускается. Но консоль говорит, что self.port не определен. Я пытался использовать addon.port, который также выдает ошибку.
2.) Если вызывается myApp.sendDetails(), он предупреждает значение 'arr' как пустое, несмотря на то, что это глобальный массив. Почему так?
EDITED: Код конструктора панели:
var { ToggleButton } = require('sdk/ui/button/toggle');
const panel = require('sdk/panel');
var main_panel = panel.Panel({
contentURL: data.url("popup.html"),
contentScriptFile: [
data.url('js/jquery-1.10.2.min.js'),
data.url("js/popup.js")
],
width: 350,
height: 400
});
var button = ToggleButton({
id: "myaddon_beta",
label: "My Addon",
icon: {
"16": "./img/icon_main_16.png",
"32": "./img/icon_main_32.png",
"64": "./img/icon_main_64.png"
},
onChange : handleChange
});
function handleChange(state){
currentUrl = tabs.activeTab.url;
currentTitle = tabs.activeTab.title;
if(state.checked){
main_panel.show({
position : button
});
button.state("window", {
checked: false
});
}
}
window
, в котором выполняется функцияCloseIt
, имеет другой объектself
? Попробуйте определить глобальныйvar port = self.port
, а затем заставитьcloseIt
запускатьport.emit("close-it")
. - person willlma   schedule 10.06.2014"close-it"
, но если вы делаетеconsole.log(port)
внутриcloseIt()
, он печатаетundefined
? Это было бы крайне странно. Можете ли вы обновить свой код, чтобы показать мне, где вы входите в консоль? Кроме того, вы запускаете этот скрипт в среде расширения, а не просто тестируете его на HTML-странице, верно? - person willlma   schedule 10.06.2014