Как я могу использовать Javascript для управления другим окном из Firefox Scratchpad, даже когда он перезагружается?

Я хочу переместить свою электронную почту от ненадежного поставщика (скажем, X) в Gmail. К сожалению, провайдер электронной почты не разрешает экспорт папки или прямую ссылку IMAP.

Единственное, что я могу сделать, это подключить Gmail к X через POP3, чтобы все, что находится в папке "Входящие" X, копировалось в Gmail.

Это я настроил, и это работает, но, конечно, POP3 сканирует только входящие.

У меня есть тысячи электронных писем в других папках, кроме входящих, поэтому мне нужно сначала переместить их в папку "Входящие". Однако я могу перемещать сообщения только через веб-интерфейс X, который позволяет перемещать только одну страницу сообщений за ход.

Поэтому мне нужно открыть папку "Сохраненные сообщения", нажать "Выбрать все", выбрать "Входящие" и нажать "Переместить", затем страница перезагрузится, и мне нужно сделать это снова... сотни раз.

Я сделал функцию Javascript (предположим MoveToInbox()), которая имитирует эти действия, и я открыл страницу в Firefox и запустил Firefox Scratchpad. Таким образом, я могу продолжать нажимать Ctrl+R в Scratchpad, затем ждать перезагрузки страницы, затем нажимать ее снова, что экономит около 50% времени.

Однако мне интересно, смогу ли я как-нибудь заставить Scratchpad работать с этой вкладкой, чтобы он ожидал перезагрузки страницы, затем выполнял сценарий, а затем снова ждал, устраняя все повторяющиеся вручную задачи.

Я думал, что смогу как-то сделать это с помощью window.addEventListener, но этот объект, кажется, очищается при перезагрузке страницы, так что я мог бы вместо этого что-то использовать?

2 ответа

Решение

Мой быстрый ответ - только с использованием аддона Firefox, такого как GreaseMonkey.

Решение, конечно, будет отличаться в разных случаях, но моим собственным был этот 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

Пример:

Перейдите на https://www.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.

Другие вопросы по тегам