Javascript bookmarklet, чтобы взять информацию с одной страницы и отправить ее в форму на другой странице - PullRequest
2 голосов
/ 28 июля 2010

Теперь, когда я обнаружил, что не могу написать JavaScript на одной странице для ввода данных формы на другую внешнюю страницу, я хотел бы сделать это с помощью букмарклета на основе браузера.

Я могу получить доступ к данным на моей исходной странице с помощью этого фрагмента кода букмарклета:

javascript:var%20thecode=document.myForm.myTextArea.value;

Если я открою внешнюю веб-форму вручную в браузере, этот код изменит то, что находится в текстовом поле:

javascript:void(document.externalForm.externalTextArea.value="HELLO WORLD"));

И этот код букмарклета откроет новое окно браузера с внешней формой:

javascript:newWindow=window.open("http://www.url.com","newWindow");if(window.focus){void(newWindow.focus());}

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

javascript:var%20newWindow=window.open("http://www.url.com","newWindow");if(window.focus){void(newWindow.focus());}window.alert(newWindow.document.externalForm.externalTextArea.value);

Как только я использую код букмарклета, чтобы открыть новое окно как newWindow, я не могу получить доступ к элементам в этом новом окне. Любые предложения, что я пропускаю? Спасибо.

1 Ответ

0 голосов
/ 28 июля 2010

Это потому, что букмарклет работает в песочнице (среде) текущей веб-страницы. Поскольку вам не разрешен доступ (DOM) к другой странице, которая не имеет того же протокола, доменного имени и порта, вы не сможете получить доступ к свойству document newWindow, когда протоколы, домены и порты не совпадают. Кстати, то же самое верно для доступа к iframe s на странице.

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

Также см. Одинаковая политика происхождения .

Обновление: О букмарклете Delicious (и др.): Его код на самом деле гласит:

(function () {
    f = 'http://delicious.com/save?url=' + encodeURIComponent(window.location.href) + '&title=' + encodeURIComponent(document.title) + '&v=5&';
    a = function () {
        if (!window.open(f + 'noui=1&jump=doclose', 'deliciousuiv5', 'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'))
            location.href = f + 'jump=yes'
    };
    if (/Firefox/.test(navigator.userAgent)) {
        setTimeout(a, 0)
    } else {
        a()
    }
})()

Итак, да, параметры передаются только с помощью запроса GET.

...