Javascript 从Firefox附加内容脚本中的main.js接收消息
我正在尝试在Javascript 从Firefox附加内容脚本中的main.js接收消息,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,我正在尝试在main.js和内容脚本之间进行通信。这是我的main.js: var pageMod = require('sdk/page-mod'); var self = require('sdk/self'); var ss = require('sdk/simple-storage'); pageMod.PageMod({ include: 'example.com', contentScriptFile: self.data.url('content-script.j
main.js
和内容脚本之间进行通信。这是我的main.js
:
var pageMod = require('sdk/page-mod');
var self = require('sdk/self');
var ss = require('sdk/simple-storage');
pageMod.PageMod({
include: 'example.com',
contentScriptFile: self.data.url('content-script.js'),
onAttach: function(worker) {
worker.port.on('getSetting', function(request) {
// var settingValue = ss.storage[request]
var settingValue = 'test value'; // for testing, return an
// arbitrary string
worker.port.emit('settingRetrieved', settingValue);
});
}
});
alert('getting setting...');
self.port.emit('getSetting', 'test setting name');
alert('asked for setting...');
self.port.on('settingRetrieved', function(results) {
alert('retrieved setting: "' + results + '"');
});
var pageMod = require('sdk/page-mod');
var self = require('sdk/self');
var ss = require('sdk/simple-storage');
pageMod.PageMod({
include: 'example.com',
contentScriptFile: self.data.url('content-script.js'),
onAttach: function(worker) {
worker.port.on('getSetting', function(request) {
var settingValue = ss.storage[request];
worker.port.emit('settingRetrieved',
{
'settingName': request,
'settingValue': settingValue,
}
);
});
}
});
// Store the setting value
var mySetting = '';
// Listen for retrieval the setting value
self.port.on('settingRetrieved', function(results) {
mySetting = results['settingValue'];
});
// Generic function to retrieve a setting value
function getSetting(setting) {
self.port.emit('getSetting', setting);
}
// Retrieve the value of 'mySetting' and do something with it
$(document).ready(function() {
$('#my-element').click(function() {
getSetting('mySetting');
/*
...
Value of mySetting has been updated; do something with it here
...
*/
});
});
和content script.js
:
var pageMod = require('sdk/page-mod');
var self = require('sdk/self');
var ss = require('sdk/simple-storage');
pageMod.PageMod({
include: 'example.com',
contentScriptFile: self.data.url('content-script.js'),
onAttach: function(worker) {
worker.port.on('getSetting', function(request) {
// var settingValue = ss.storage[request]
var settingValue = 'test value'; // for testing, return an
// arbitrary string
worker.port.emit('settingRetrieved', settingValue);
});
}
});
alert('getting setting...');
self.port.emit('getSetting', 'test setting name');
alert('asked for setting...');
self.port.on('settingRetrieved', function(results) {
alert('retrieved setting: "' + results + '"');
});
var pageMod = require('sdk/page-mod');
var self = require('sdk/self');
var ss = require('sdk/simple-storage');
pageMod.PageMod({
include: 'example.com',
contentScriptFile: self.data.url('content-script.js'),
onAttach: function(worker) {
worker.port.on('getSetting', function(request) {
var settingValue = ss.storage[request];
worker.port.emit('settingRetrieved',
{
'settingName': request,
'settingValue': settingValue,
}
);
});
}
});
// Store the setting value
var mySetting = '';
// Listen for retrieval the setting value
self.port.on('settingRetrieved', function(results) {
mySetting = results['settingValue'];
});
// Generic function to retrieve a setting value
function getSetting(setting) {
self.port.emit('getSetting', setting);
}
// Retrieve the value of 'mySetting' and do something with it
$(document).ready(function() {
$('#my-element').click(function() {
getSetting('mySetting');
/*
...
Value of mySetting has been updated; do something with it here
...
*/
});
});
content script.js
中的self.port.on()
似乎没有从main.js
接收消息。我做错了什么?Facepalm。content script.js
中的代码被包装在jQuery事件处理程序中,因此self.port.on()
无法正确侦听
下面是工作代码——首先,main.js
:
var pageMod = require('sdk/page-mod');
var self = require('sdk/self');
var ss = require('sdk/simple-storage');
pageMod.PageMod({
include: 'example.com',
contentScriptFile: self.data.url('content-script.js'),
onAttach: function(worker) {
worker.port.on('getSetting', function(request) {
// var settingValue = ss.storage[request]
var settingValue = 'test value'; // for testing, return an
// arbitrary string
worker.port.emit('settingRetrieved', settingValue);
});
}
});
alert('getting setting...');
self.port.emit('getSetting', 'test setting name');
alert('asked for setting...');
self.port.on('settingRetrieved', function(results) {
alert('retrieved setting: "' + results + '"');
});
var pageMod = require('sdk/page-mod');
var self = require('sdk/self');
var ss = require('sdk/simple-storage');
pageMod.PageMod({
include: 'example.com',
contentScriptFile: self.data.url('content-script.js'),
onAttach: function(worker) {
worker.port.on('getSetting', function(request) {
var settingValue = ss.storage[request];
worker.port.emit('settingRetrieved',
{
'settingName': request,
'settingValue': settingValue,
}
);
});
}
});
// Store the setting value
var mySetting = '';
// Listen for retrieval the setting value
self.port.on('settingRetrieved', function(results) {
mySetting = results['settingValue'];
});
// Generic function to retrieve a setting value
function getSetting(setting) {
self.port.emit('getSetting', setting);
}
// Retrieve the value of 'mySetting' and do something with it
$(document).ready(function() {
$('#my-element').click(function() {
getSetting('mySetting');
/*
...
Value of mySetting has been updated; do something with it here
...
*/
});
});
和content script.js
:
var pageMod = require('sdk/page-mod');
var self = require('sdk/self');
var ss = require('sdk/simple-storage');
pageMod.PageMod({
include: 'example.com',
contentScriptFile: self.data.url('content-script.js'),
onAttach: function(worker) {
worker.port.on('getSetting', function(request) {
// var settingValue = ss.storage[request]
var settingValue = 'test value'; // for testing, return an
// arbitrary string
worker.port.emit('settingRetrieved', settingValue);
});
}
});
alert('getting setting...');
self.port.emit('getSetting', 'test setting name');
alert('asked for setting...');
self.port.on('settingRetrieved', function(results) {
alert('retrieved setting: "' + results + '"');
});
var pageMod = require('sdk/page-mod');
var self = require('sdk/self');
var ss = require('sdk/simple-storage');
pageMod.PageMod({
include: 'example.com',
contentScriptFile: self.data.url('content-script.js'),
onAttach: function(worker) {
worker.port.on('getSetting', function(request) {
var settingValue = ss.storage[request];
worker.port.emit('settingRetrieved',
{
'settingName': request,
'settingValue': settingValue,
}
);
});
}
});
// Store the setting value
var mySetting = '';
// Listen for retrieval the setting value
self.port.on('settingRetrieved', function(results) {
mySetting = results['settingValue'];
});
// Generic function to retrieve a setting value
function getSetting(setting) {
self.port.emit('getSetting', setting);
}
// Retrieve the value of 'mySetting' and do something with it
$(document).ready(function() {
$('#my-element').click(function() {
getSetting('mySetting');
/*
...
Value of mySetting has been updated; do something with it here
...
*/
});
});
再次解决它!谢谢分享,别难过,这些真的帮助了非sdk开发者,我现在可以更好地帮助其他人了,因为我已经看到了这一点。