如何使用Javascript从Firefox Scratchpad控制其他窗口,即使在重新加载时也是如此



我想把我的电子邮件从一个有点不可靠的提供商(比如X)转移到Gmail。不幸的是,电子邮件提供商不允许文件夹导出或直接IMAP链接。

我唯一能做的就是通过POP3将Gmail连接到X,这样X收件箱中的任何内容都会被复制到Gmail。

这个我已经设置好了,它可以工作,但POP3当然只扫描收件箱。

我在收件箱以外的其他文件夹中有数千封电子邮件,所以我需要先把它们移到收件箱。然而,我只能通过X的web GUI移动消息,它每次只允许移动一页消息。

所以我必须打开"保存的邮件"文件夹,单击"全选",选择"收件箱",然后单击"移动",然后页面将重新加载,我需要再次这样做。。。数百次。

我制作了一个Javascript函数(假设MoveToInbox())来模拟这些操作,然后在Firefox中打开页面并启动了Firefox Scratchpad。所以,我可以在Scratchpad中继续按Ctrl+R,然后等待页面重新加载,然后再按一次,这节省了大约50%的时间。

然而,我想知道,我是否可以以某种方式让Scratchpad使用该选项卡,以便它等待页面重新加载,然后执行脚本,然后再次等待,从而消除所有手动重复任务。

我想我可以用window.addEventListener来做这件事,但这个对象似乎在页面重新加载时被清除了,所以有什么可以代替的吗?

我自己的快速答案只是使用诸如GreaseMonkey之类的Firefox插件。

当然,在不同的情况下,解决方案会有所不同,但我自己的解决方案是GreaseMonkey Javascript:

// the function to select all messages and programmatically click on 
// move button:
function moveToInbox()
{
selectAllCheckbox=document.getElementById("messagesForm")[0]; 
mailboxSelector=document.getElementsByName('targetMailbox')[0];
selectAllCheckbox.click(); // click on "select all" checkbox
mailboxSelector.selectedIndex=1; //specify that we are moving to inbox
inx.mail.mailbox.mailboxTransfer(); // execute provider's function for moving mail.
}
// This gets executed on any page that matches URL specified in Greasemonkey script properties
// I have put this to execute, if the URL is for the folder I want to move messages from.
messageList=document.getElementById("messagesForm")[0];
// in my case, if there are no more messages to move, the form is not created at all, so 
// I can check for its existance, to determine if I need to execute moving.
if (messageList == null)
{
return;
}
else
{
moveToInbox();
}

使用iFrame

第一个问题是变量和函数在重新加载后丢失:
-将<iframe>src = "X"一起使用
现在跨域策略造成了问题:
-将<iframe>src放在同一网站上

然后,您可以使用iframeId.contentDocument轻松访问和操作网站

例如:

导航到google.com,使用Inspect Element添加iframe:
<iframe src="https://www.google.ae" id="someID"> </iframe>
然后,您可以使用JavaScript对iframe执行任何操作:
someID.contentDocument.location.reload(); setTimeout('someID.contentDocument.getElementById('lst-ib').value="iframes rock"',1000); //You should use something better than setTimeout to wait for the website to load.

相关内容

  • 没有找到相关文章

最新更新