gpt4 book ai didi

javascript - Firefox 插件 : Have content script retrieve data stored by addon script (using a context menu if possible)

转载 作者:行者123 更新时间:2023-11-30 17:05:48 25 4
gpt4 key购买 nike

我尝试构建一个可以做到这一点的基本插件:

  • 在页面上复制几个字段(已经填写)的值(不是很重要的是现在哪个)
  • 在本地保存值
  • 将保存的值粘贴到类似的表单(相同名称的相同字段等)在另一页上(也不是很重要的是哪个页面现在)。

所以我考虑使用上下文菜单并拥有

  • 要复制数据的一项,它执行以下操作:
    • 使用 jQuery 从页面中收集值
    • 然后发送到插件脚本进行存储
  • 要粘贴数据的一项
    • 接收存储的数据,作为数据发送
    • 用数据填充空白字段

我遇到的问题是数据类型以及将存储的数据发送到内容脚本。

这是我目前所拥有的:

主要.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);
}

});

最佳答案

好的,我在进行了评论中描述的修改后运行了附加组件。它在整个 session 中将第一个复制的 formData 粘贴到特定 session 中,即使复制了后续值也是如此。问题在于简单存储变量 ss 的值仅在开始时更新,菜单项 pasteItemvalue 属性被初始化创建时,也就是开始时间。解决方法是更换

var ss.storage.storedFormData = JSON.stringify(formData);

pasteItem.data = ss.storage.storedFormData = JSON.stringify(formData);

关于javascript - Firefox 插件 : Have content script retrieve data stored by addon script (using a context menu if possible),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28070436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com