【发布时间】:2012-12-14 07:08:00
【问题描述】:
我想从一个选项卡中打开的页面中获取一些数据,并将其粘贴到另一个浏览器选项卡中打开的另一个页面的文本区域中。如何使用 Javascript 和 Greasemonkey 做到这一点?
【问题讨论】:
-
我不认为您可以仅使用 javascript 在选项卡之间传递数据。
我想从一个选项卡中打开的页面中获取一些数据,并将其粘贴到另一个浏览器选项卡中打开的另一个页面的文本区域中。如何使用 Javascript 和 Greasemonkey 做到这一点?
【问题讨论】:
GM_setValue一起放入store。如果需要,请使用 GM_openInTab 打开下一个网站。GM_getValue 检索存储的值并将其粘贴到文本区域中。虽然有必要在表格页面之后加载文本区域页面,但与 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,您可能希望从这里开始 How do I get the window object for a specific tab if I have that tab's tabId?。
鉴于问题已被编辑并添加了 Greasemonkey 的使用,这可能会也可能不会满足您的需求,不幸的是,我在 Greasemonkey 方面不够熟练,无法为您提供基于 GM 的解决方案。如果您在使用 XDM 的解决方案方面需要帮助,我很乐意为您提供帮助。
【讨论】: