结合两个bookmarklet

时间:2009-10-29 19:40:42

标签: javascript bookmarklet

昨天我发现了Bookmarklets并且完全相爱了。我写了几篇文章来减少我最喜欢的网站上几个常见任务的点击次数。如果可能的话,我现在想要做的是将这些书签中的两个的动作组合成一个单独的脚本/链接。当前设置如下:Bookmarklet 1(B1)执行加载页面(URL 2)的操作(在URL 1上),其中Bookmarklet 2(B2)然后将标准数据集输入到表单中并提交它。 / p>

我尝试了以下各种变体:

javascript:(function(){w = window.open( codeFromB1 ,'CatchyPageTitle'); w.TryToWriteSomethingToTheNewWindowToPassAndCallFunctionB2;)}();

但我在w.TryToWriteSomethingToTheWindow的所有尝试都会产生不同类型的错误。我最近的尝试是使用类似的东西:

警报(w.document.getElementsByTagName( “形式”)的长度);它在第一次调用时从调用页面给出计数,但第二次从新窗口开始计数...

无论如何,这是我今天的故事。

总之,我是一个需要指导的迷失灵魂。我有两个脚本操作发生在两个不同的页面上,我想将它们组合成一个可以保存为Bookmarklet的代码片段。我需要有人指出我正确的方向,以便我可以弄清楚如何“链接”两个页面/脚本,以便创建一个壮观的Bookmarklet。

提前感谢您的帮助。


另外,我有一个模拟数据Array(),我用它来完成脚本的其余部分,并为那些比我更聪明的人找到了另一个问题.B2的部分内容如下:

wdoc.forms [0] = .t5.value#;

其中t5是表单中输入/文本的名称。为什么这样做但是:

thisInput ='t'.concat(i); //在for循环中i = 5 wdoc.forms [0] = .thisInput.value#;

给我一​​个错误 - “thisInput”未定义。我还尝试使用输入/文本名称创建一个数组,如:

document.forms [0] .thisInput [I]。价值=#;

但是这会产生同样的错误。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

不同域(或子域)上的URL 1是否为URL 2?如果是这样,您将遇到跨域问题。您可以使用HTML5 cross-window messaging解决此问题,至少对于支持它的浏览器而言。

如果您愿意使用特定于Firefox并且需要使用它来安装Greasemonkey扩展程序,您可能也会对Greasemonkey感兴趣。我用它来轻松编写多页书签,这些书签通过复杂的表格,或从多个搜索页面收集数据。在脚本开始时,您只需根据document.location.href选择下一步操作。您还可以利用the window.name hack在页面之间共享信息。

答案 1 :(得分:0)

我做了一些测试并发现:

wdoc = w.document;警报(wdoc.location.href);警报(wdoc.location.href);

首先显示'undefined',但第二个警告将显示原始窗口中(新窗口的)正确URL。所以我做了一些测试并得出结论,我昨晚的尝试失败只是因为在调用函数之前窗口需要加载。

所以现在我有:

的javascript:(函数(){ W = window.open( B1 , “CatchyPageTitleThatDoesn'tAppear”); 的setTimeout( “otherFunction();”,750);})(); function otherFunction(){ wdoc = w.document; thisDoc =文件; wdoc.setVariablesInTheFormInTheNewWindow; wdoc.forms [0] .submit();}

哪个有效!哇噢!

现在我继续谈到对我来说真的很难的部分。我想从URL1中提取其他数据,将其放入数组中,然后使用该数组在URL2上设置表单中的值。我应该有资格。数组,数据,表单,简单。我不确定如何提取数据。看起来有点像这样:

tbody class =“两次露面中的第一次”>  TR>  TD> / TD>  TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> TD> img /> / TD> / TR> TR>

> 特定文字 / th> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> / TR> TR>第>

其他特定文字 / th> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> td>#/ td> / TR> / TBODY>

所以,我知道(也许?)我可以使用像

这样的东西

uglyText = wdoc.getElementsByClass(“两个出现中的第一个”)[0] .innerHTML;

将数据混乱变成字符串,但不知道如何从那里开始。我理解正则表达式的概念,并假设这样的东西可能在这里工作,但从未成功地自己编写过。此外,如果重要的话,有时会有10个数据点,有时会有11个数据点。

此时我只关心 specific_text 中的#s到 other_specific_text 。因此,任何简单的建议都会引导我找到一个能够按顺序抓住它们的解决方案,这将是我的一天。

再次感谢您的帮助。