如何从一个选项卡中获取数据并使用greasemonkey将其粘贴到另一个选项卡

时间:2012-12-14 07:08:00

标签: javascript greasemonkey

我想从一个标签中打开的页面中获取一些数据,然后将其粘贴到另一个浏览器标签中打开的另一个页面的文本区域中。我怎么能用Javascript和Greasemonkey做到这一点?

2 个答案:

答案 0 :(得分:5)

  1. 在元数据块中设置两个域,以便在两个页面上激活脚本
  2. 在两个网站中查找唯一元素,您可以从中检测当前所在的页面。
  3. 如果您在包含该表的页面上,请获取数据并将其与GM_setValue一起放入商店。如果需要,请使用GM_openInTab
  4. 打开下一个网站
  5. 如果检测到下一个网站,请使用GM_getValue检索存储的值并将其粘贴到textarea中。
  6. Greasemonkey不是很难,即使在表格页面之后加载textarea页面也是必要的。

    示例

    // @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","") );
        }
    });
    

答案 1 :(得分:2)

这很难做到。这不是不可能的,但确实很难。

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

  1. 获取嵌套页面的window对象,向receiveMessage事件添加事件侦听器。
  2. 使用window[name].postMessage(msg, url)向其他窗口发送消息。
  3. 捕获消息事件的data属性,该属性将包含您发送的信息。
  4. 使您的案例变得困难的原因是您希望跨选项卡进行通信。我会说我没有跨选项卡进行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的解决方案的帮助,我很乐意提供帮助。