我想从一个选项卡中打开的页面中获取一些数据,并将其粘贴到另一个浏览器选项卡中打开的另一个页面的文本区域中。如何使用 Javascript 和 Greasemonkey 做到这一点?
2 回答
- 在元数据块中设置两个域,以便在两个页面上激活脚本
- 在两个网站中找到一个独特的元素,您可以从中检测您当前所在的页面。
- 如果您在带有表格的页面上,请获取数据并将其放在
GM_setValue
商店中。如果需要,请使用 . 打开下一个网站GM_openInTab
。 - 如果检测到下一个网站,则检索存储的值
GM_getValue
并将其粘贴到 textarea 中。
尽管有必要在表格页面之后加载文本区域页面,但对 Greasemonkey 来说并不难。
例子
// @include http://website1.com/*
// @include http://website2.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js
$(document).ready(function() {
if( $("#divfromsite1").length )
{
GM_setValue("pastetext", $("#gettable").html() );
GM_openInTab("http://website2.com/");
}
else
{
$("#pastetextarea").val( GM_getValue("pastetext","") );
}
});
这很难做到。这并非不可能,但确实相当困难。
跨文档消息传递是一种使用 JavaScript 将消息从一个页面传递到另一个页面的方式。这样做的第一个先决条件是文件必须具有相同的来源。这意味着它们必须来自同一域上的同一端口,并且必须共享相同的协议。当您将一个页面嵌套在iframe
另一个页面中时,它的效果很好。在这种情况下,您可以执行以下操作:
- 获取
window
嵌套页面的对象,为事件添加事件监听器receiveMessage
。 - 用于
window[name].postMessage(msg, url)
向另一个窗口发送消息。 - 捕获
data
消息事件的属性,该属性将包含您发送的信息。
使您的案例变得困难的是您想要跨选项卡进行通信。我会说我没有跨标签执行 XDM 的经验,并且个人认为,如果您有一个跨多个标签运行的应用程序需要相互交互,那么您可能需要审查您的应用程序设计......用户可能不喜欢您在他们的浏览器中更改了他们可能无法立即看到并因此理解的内容。
无论如何,如果你想继续这样做,你需要看看不同的浏览器如何让你访问他们的标签。对于 Firefox,您可能想从这篇文章Get window object from tab开始,而对于 Chrome,您可能想从这里开始如果我有特定选项卡的 tabId,如何获取特定选项卡的窗口对象?.
鉴于问题已被编辑并添加了 Greasemonkey 的使用,这可能会或可能不会满足您的需求,不幸的是我在 Greasemonkey 方面的技能不够熟练,无法为您提供基于 GM 的解决方案。如果您在使用 XDM 的解决方案方面需要帮助,我将很乐意为您提供帮助。