【问题标题】:How to grab data from one tab and paste it to another tab using greasemonkey如何使用greasemonkey从一个选项卡中获取数据并将其粘贴到另一个选项卡
【发布时间】:2012-12-14 07:08:00
【问题描述】:

我想从一个选项卡中打开的页面中获取一些数据,并将其粘贴到另一个浏览器选项卡中打开的另一个页面的文本区域中。如何使用 Javascript 和 Greasemonkey 做到这一点?

【问题讨论】:

  • 我不认为您可以仅使用 javascript 在选项卡之间传递数据。

标签: javascript greasemonkey


【解决方案1】:
  1. 在元数据块中设置两个域,以便在两个页面上激活脚本
  2. 在这两个网站中找到一个独特的元素,您可以从中检测出您当前所在的页面。
  3. 如果你在有表格的页面上,获取数据并与GM_setValue一起放入store。如果需要,请使用 GM_openInTab 打开下一个网站。
  4. 如果检测到下一个网站,则使用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","") );
    }
});

【讨论】:

  • 示例获得更多支持(提示)。此外,这个问题非常糟糕。可能只需要一个简单的 AJAX 请求。
  • 我是来回答问题的,而不是为每个人提供节目。如果用户能够使用此说明执行他的代码,那很好。此外,我和 LeviBothelo 只是从字面上理解了粘贴到文本区域的内容。
  • @BrockAdams 现在添加了一个示例:P
  • 好的 +1。这将适用于 OP 提供的详细程度,除了您使用 jQuery 并且不显示如何在脚本中包含 jQuery。 (这个问题与jQuery无关,OP无疑是GM的新手。)
【解决方案2】:

这很难做到。并非不可能,但确实相当困难。

跨文档消息传递是一种使用 JavaScript 将消息从一个页面传递到另一个页面的方式。这样做的第一个先决条件是文件必须具有相同的来源。这意味着它们必须来自同一域上的同一端口并且必须共享相同的协议。当您将一个页面嵌套在另一个内部的iframe 中时,它的效果很好。在这种情况下,您可以执行以下操作:

  1. 获取嵌套页面的window对象,为receiveMessage事件添加事件监听。
  2. 使用window[name].postMessage(msg, url) 向其他窗口发送消息。
  3. 捕获消息事件的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 的解决方案方面需要帮助,我很乐意为您提供帮助。

【讨论】:

  • 如果 m 打算使用 greasmonkey 怎么办?那会降低难度吗?我也忘了提到这两个页面属于同一个域..
  • 我不知道greasemonkey,所以我不能说,但我不认为你可以绕过浏览器API。您需要认真考虑这是否会为您的应用程序增加显着价值……通常在编程中,如果某些事情太难了,那是因为有更好的方法。
  • 我问这个的原因是因为,我几乎一半的作品需要我在同一域的两个选项卡之间复制粘贴数据,除了greasemonkey之外我想不出任何其他选择。请建议您是否有一些您认为可以帮助我解决问题的东西。在此先感谢:)
  • 这个答案不适用于这个问题!这是一个 Greasemonkey 场景,OP 无法重组页面以添加 iframe。链接的答案也不适用;它们用于extension API。 OP 并没有询问是否要编写扩展程序,他也不需要。 Greasemonkey 可以解决他的问题,但细节很大程度上取决于 OP 省略的细节。
  • @BrockAdams - 我发帖时,该问题标记为 Greasemonkey,问题中也未提及 Greasemonkey。查看编辑日志。我在他的评论中将 Greasemonkey 的建议解释为一种可能性,但不知道他已经在他的设置中实现了它。具体取决于 OP,而不是给出答案以读懂他的想法的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2021-11-04
  • 1970-01-01
相关资源
最近更新 更多