2010-02-13 2 views
3

Я ищу быстрый способ захватить некоторые данные с одной веб-страницы и выбросить ее в другую. У меня нет доступа к строке запроса в URL-адресе второй страницы, поэтому передача данных таким образом не является вариантом. Сейчас я использую Greasemonkey скрипт пользователя в тандеме с триггером Bookmarklet JS: javascript:doIt();Что такое эффективный способ перемещения данных с одной открытой вкладки браузера на другую?

// ==UserScript== 
// @include  public_site 
// @include  internal_site 
// ==/UserScript== 

if (document.location.host.match(internal_site)) { 
    var datum1 = GM_getValue("d1"); 
    var datum2 = GM_getValue("d2"); 
} 

unsafeWindow.doIt = function() { 
    if(document.location.host.match(public_site)) { 
    var d1 = innerHTML of page element 1; 
    var d2 = innerHTML of page element 2; 
    //Next two lines use setTimeout to bypass GM_setValue restriction 
    window.setTimeout(function() {GM_setValue("d1", d1);}, 0); 
    window.setTimeout(function() {GM_setValue("d2", d2);}, 0); 
    } 
    else if(document.location.host.match(internal_site)) { 
    document.getElementById("field1").value = datum1; 
    document.getElementById("field2").value = datum2; 
    } 
} 

В то время как я открыт к другому методу, я предпочел бы остаться с этой базовой моделью, если это возможно, так как это просто небольшая часть кода в doIt(), которая используется на нескольких других страницах, в основном для автоматизации заполнения форм на основе даты; людям действительно нравится их «волшебная кнопка».

Приведенный выше код работает, но процесс прерывания прерывается: для того, чтобы пользователь мог узнать, какую страницу на общедоступном узле захватить данные, сначала нужно открыть внутреннюю страницу. Затем, после того, как GM cookie будет установлен с общей страницы, внутренняя страница должна быть перезагружена, чтобы получить правильную информацию во внутренних переменных страницы. Мне интересно, есть ли способ GM_getValue() в bookmarklet-clicktime, чтобы предотвратить необходимость обновления. Благодаря!

+0

Не могли бы вы добавить ссылку на UserScript вы разрабатываете? Я не уверен, что понимаю ваш последний абзац. – NVI

+0

Я использую очень схожую технику в одном из своих сценариев http://github.com/NV/pwnlast.fm/blob/master/pwnlastfm.user.js#L20-26, но я не использую файлы cookie или GM_setValue/GM_getValue. – NVI

ответ

0

Вы можете переместить букмарклет на кнопку или ссылку - что Greasemonkey добавит на страницы? Затем вы можете настроить обработчики click-event для запуска GM_getValue().

Похоже, что в текущем методе используется «отверстие безопасности», которое может быть закрыто в будущем. Вместо этого вы можете рассмотреть возможность сделать все в расширении Firefox.

Возможно полезная ссылка: http://articles.sitepoint.com/article/ten-tips-firefox-extensions/1

+0

Спасибо, это была хорошая идея. В конце концов, использование дыр в безопасности - это плохая практика. – slk