【发布时间】:2015-01-22 10:09:29
【问题描述】:
我尝试构建一个可以做到这一点的基本插件:
- 复制页面上几个字段(已经填写)的值(不是很 现在重要的是哪一个)
- 在本地保存值
- 将保存的值粘贴到类似的表单上(具有相同名称的相同字段 等)在另一个页面上(对于哪个页面也不是很重要 现在)。
所以我考虑使用上下文菜单并拥有
- 复制数据的一项,执行以下操作:
- 使用 jQuery 从页面中收集值
- 然后发送到插件脚本进行存储
- 要粘贴数据的一项
- 接收存储的数据,作为数据发送
- 用数据填充空白字段
我遇到的问题是数据类型以及将存储的数据发送到内容脚本。
这是我目前所拥有的:
main.js
var cm = require("sdk/context-menu");
var ss = require("sdk/simple-storage");
// The following gave me a 'Message: SyntaxError: missing ; before statement'
// So I guess I cannot set the stored data like this to be reachable all over
// the addon script...
// var ss.storage.storedFormData = null;
var copyItem = cm.Item({
label: "copy",
data: null
});
// Then here I have 'data is not defined'
var pasteItem = cm.Item({
label: "paste",
data: ss.storage.storedFormData
});
var searchMenu = cm.Menu({
label: "Choose what you want to do",
contentScriptFile: [
data.url('jquery-1.11.2.min.js'),
data.url('content-script.js')
],
onMessage: function (formData) {
console.log('Storing formData');
var ss.storage.storedFormData = JSON.stringify(formData);
},
items: [copyItem, pasteItem]
});
内容脚本.js
self.on("click", function (node, data) {
if (data === null) {
// 'data' is null = get data from page
var formData = new Object();
// Get elements on page
formData.element1 = $('input#elementId1').val();
formData.element2 = $('input#elementId2').val();
formData.element3 = $('input#elementId3').val();
// Send data to addon script to be stored
self.postMessage(formData);
} else {
// 'data' is not null, populate the page with data
// Retrieve the data
formData = JSON.parse(data);
// Fill the fields with the data
$('input#elementId1').val(formData.element1);
$('input#elementId2').val(formData.element2);
$('input#elementId3').val(formData.element3);
}
});
【问题讨论】:
-
在
ss.storage.storedFormData = JSON.stringify(formData);之前你不想要var -
另外,
data是未定义的,所以添加一行var data = require("sdk/self").data;
标签: javascript firefox firefox-addon firefox-addon-sdk