将两个书签脚本合并

3
昨天我发现了书签小工具,并且非常喜欢。我编写了几个来减少我最喜欢的网站上一些常见任务所需的点击次数。如果可能的话,我现在想要做的是将这两个书签小工具的操作合并为一个单一的脚本/链接。当前设置如下:书签小工具1(B1)执行一个动作(在URL 1上),加载一个页面(URL 2),然后书签小工具2(B2)输入一组标准数据到一个表单中并提交。
我尝试了以下各种变化:
javascript:(function(){w=window.open(codeFromB1,'CatchyPageTitle'); w.TryToWriteSomethingToTheTheNewWindowToPassAndCallFunctionB2;)}();
但是所有尝试都无法正确调用w.TryToWriteSomethingToTheTheWindow,会产生不同类型的错误。我的最新尝试是使用类似于:
alert(w.document.getElementsByTagName("form").length);
其中第一次调用时从调用页面获取计数,第二次调用时从新窗口获取计数...
总之,这就是今天的故事。
简而言之,我需要指导。我有两个在两个不同页面上执行的脚本操作,我想将它们合并为一个代码片段,可以保存为书签小工具。我需要有人指点我正确的方向,以便我可以弄清楚如何“链接”这两个页面/脚本,从而创建一个壮观的书签小工具。
谢谢您提前的帮助。
另外,我有一个模拟数据数组(Array()),我正在使用它来完成脚本的其余部分,并发现了一个更聪明的问题。B2的一部分如下:
wdoc.forms[0].t5.value=#;
其中t5是表单中输入/文本的名称。为什么这样可以工作,但是:
thisInput = 't'.concat(i); // 其中i=5在for循环中 wdoc.forms[0].thisInput.value=#;
会给我一个错误 - “未定义thisInput”。我还尝试了创建一个包含输入/文本名称的数组,例如:
document.forms[0].thisInput[i].value=#;
但是这也会产生相同的错误。有什么建议吗?

1
因为对书签工具的“彻底热爱”,所以点赞! - Pool
2个回答

1

URL 1和URL 2是否在不同的域名(或子域名)上?如果是,您将遇到跨域问题。对于支持它的浏览器,您可以使用HTML5跨窗口消息来解决它。

如果您愿意针对Firefox并要求任何人都安装Greasemonkey扩展程序,那么您可能还会对Greasemonkey感兴趣。我已经用它轻松编写了多页书签,这些书签通过复杂的表单或从多个搜索页面收集数据。在脚本开始时,您只需根据document.location.href选择下一步要执行的操作。您还可以利用window.name hack在页面之间共享信息。


URL1和URL2都在同一个子域名上。我正在尝试避免在这些脚本中使用Greasemonkey,原因有几个。主要原因是一些对我让它工作感兴趣的人没有访问FF的权限,而且我不敢尝试那些类似于Greasemonkey的IE插件之一,也不想编写同一组脚本的多个版本。感谢HTML5链接。我将研究一下window.postMessage()的问题。希望它能对我起作用。 - Aaron Luman

0

我做了一些更多的测试,发现了以下情况:

wdoc=w.document;alert(wdoc.location.href);alert(wdoc.location.href);

首先会显示“未定义”,但第二个警报将显示原始窗口中新窗口的正确网址。因此,我进行了更多的测试,并得出结论,昨晚的尝试之所以失败,仅仅是因为在调用函数之前需要加载窗口。

现在我有:

javascript:(function(){ w=window.open(B1,"CatchyPageTitleThatDoesn'tAppear"); setTimeout("otherFunction();",750);})(); function otherFunction(){ wdoc=w.document;thisDoc=document; wdoc.setVariablesInTheFormInTheNewWindow;wdoc.forms[0].submit();}

这很有效!太棒了!

现在我要开始做对我来说真正困难的部分。我想从URL1中提取其他数据,将其放入数组中,然后使用该数组将URL2表单中的值设置为值。我应该说明一下。数组、数据、表单都很容易。我不确定如何准确地提取数据。它看起来有点像这样:

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> /tr> tr> specific text /th> td># /td> td># /td> td># /td> td># /td> td># /td> td># /td> td># /td> td># /td> td># /td> td># /td> /tr> tr> th>

其他具体文本 /th> td>#/td> 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("first of two appearances")[0].innerHTML;

将那一堆数据转换成字符串,但不确定如何继续。我了解正则表达式的概念,并且假设在这里可能会有用,但我从未成功编写过一个。另外,有时候数据点是10个,有时候是11个,如果这有什么影响的话。

目前我只关心从特定文本其他特定文本的#。因此,任何简单的建议都能帮助我找到按顺序获取它们的解决方案,这将使我非常高兴。

再次感谢您的帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接