2009-10-29 2 views
3

Вчера я обнаружил закладки и полностью влюблен. Я написал несколько, чтобы уменьшить количество кликов для нескольких общих задач на моих любимых сайтах. То, что я хотел бы сделать сейчас, по возможности, состоит в объединении действий двух этих букмарклетов в один сценарий/ссылку. Текущая настройка следующая: закладка 1 (B1) выполняет действие (по URL-адресу 1), которое загружает страницу (URL-адрес 2), когда закладка 2 (B2) затем вводит стандартный набор данных в форму и отправляет ее.Сочетание двух букмарктов

Я попробовал все виды вариаций следующего:

JavaScript: (функция() {W = window.open (codeFromB1, 'CatchyPageTitle'); w.TryToWriteSomethingToTheTheNewWindowToPassAndCallFunctionB2;)}();

Но все мои попытки w.TryToWriteSomethingToTheTheWindow дают ошибки разных типов. Моя последняя попытка состояла в том, чтобы использовать что-то вроде:

alert (w.document.getElementsByTagName ("form"). Length); который дает счет с вызывающей страницы в первый раз, но счет из нового окна во второй раз называется ...

Так или иначе, это моя история на сегодня.

Итак, я потерянная душа, нуждающаяся в руководстве. У меня есть два действия скрипта, которые происходят на двух разных страницах, которые я хотел бы объединить в один фрагмент кода, который можно сохранить как закладку. Мне нужно, чтобы кто-то указал мне в правильном направлении, чтобы я мог понять, как «связывать» две страницы/скрипты, чтобы создать один эффектный «Закладок».

Заранее благодарим за любую помощь.


Кроме того, у меня есть макет массива данных(), который я использую, чтобы закончить остальную часть сценария и нашел еще один вопрос для тех, кто умнее утра I. Часть В2 гласит:

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

где t5 - имя ввода/текста в форме. Почему это работает:

thisInput = 't'.concat (i); // где i = 5 в for-loop wdoc.forms [0] .thisInput.value = #;

дает мне ошибку - «thisInput» не определен. Я также попытался создать массив с именами ввода/текста, такими как:

document.forms [0] .thisInput [i] .value = #;

, но это дает ту же ошибку. Какие-либо предложения?

+1

+1 для того, чтобы быть «полностью влюбленным» с букмаркетом ... – Pool

ответ

1

Является ли URL 1 в другом домене (или поддомене) URL 2? Если это так, вы столкнетесь с проблемой междоменного доступа. Вы можете решить это, используя HTML5 cross-window messaging, по крайней мере, для браузеров, которые его поддерживают.

Вы также можете быть заинтересованы в Greasemonkey, если вы хотите быть специальным браузером Firefox и требовать от всех, кто использует его, установить расширение Greasemonkey. Я использовал его, чтобы легко писать многостраничные букмарклеты, которые проходят сложные формы, или собирать данные с нескольких страниц поиска. В начале скрипта вы просто выбираете, что делать дальше, на основе document.location.href. Вы также можете использовать the window.name hack для обмена информацией между страницами.

+0

URL1 и URL2 находятся на одном и том же поддомене. Я стараюсь избегать использования Greasemonkey в этих сценариях по нескольким причинам.Основная причина заключается в том, что несколько людей, которые заинтересованы в том, чтобы я работаю над этим, не имеют доступа к FF, и я не достаточно смел, чтобы попробовать один из этих надстроек IE, похожих на greasemonkey, и не заинтересован в написании нескольких версий тот же набор скриптов. Спасибо за ссылку HTML5. Я собираюсь заглянуть в окно window.postMessage(). Надеюсь, это сработает для меня – baiano

0

Я сделал еще несколько тестов и обнаружили, что:

wdoc = w.document; предупреждение (wdoc.location.href); предупреждение (wdoc.location.href);

сначала отображает «неопределенный», но второе предупреждение отображает правильный url (из нового окна) из исходного окна. Итак, я сделал еще несколько тестов и пришел к выводу, что мои попытки прошлой ночи терпели неудачу просто из-за того, что окно нужно загрузить перед вызовом функций.

Так что теперь у меня есть:

JavaScript: (функция() { W = window.open (B1, "CatchyPageTitleThatDoesn'tAppear"); SetTimeout ("otherFunction();", 750) ;})(); функция otherFunction() { wdoc = w.document; thisDoc = document; wdoc.setVariablesInTheFormInTheNewWindow; wdoc.forms [0] .submit();}

который работает! Woohoo!

И теперь я перехожу к тому, что для меня очень тяжелая часть. Я хотел бы извлечь дополнительные данные из URL1, поместить их в массив и затем использовать этот массив для установки значений в форме на URL2. Я должен это квалифицировать. Массивы, данные, формы, легко. Я не уверен, как именно потянуть данные. Это выглядит вроде как это:

TBODY класс = "первый из двух матчей"> тр> тд>  /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>/тр> тр>

й>конкретный текст/е> тд> #/TD> TD> #/TD> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td>/tr> tr> th>

другие спецификации ic text/th> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/TD> TD> #/TD> TD> #/TD> TD> #/TD>/тр>/TBODY>

Так, я знаю (может быть?), что я могу использовать что-то вроде

uglyText = wdoc.getElementsByClass ("первое из двух появлений") [0] .innerHTML;

, чтобы получить этот беспорядок данных в строку, но я не уверен, как исходить оттуда. Я понимаю концепцию регулярных выражений и предполагаю, что что-то подобное может работать здесь, но никогда не было написано. Кроме того, иногда есть 10 точек данных, а в других случаях - 11, если это имеет значение.

На данный момент я только заботиться о #s от specific_text в other_specific_text. Поэтому любое простое предложение, которое приведет меня к решению, которое их захватит в порядке, сделает мой день.

Еще раз спасибо за помощь.

Смежные вопросы