2015-10-11 4 views
0

Я хотел бы создать простой букмарклет, который:не может выполнить функцию на новом окне Открыт с Bookmarklet

  1. открывает определенный веб-сайт в новой вкладке (окне)
  2. и отправляет строку поиска сайта поле.

мне удается делать 1 и 2 отдельно, но при вводе их вместе вкладка открывается без поля поиска, получающего любой вход.

У меня мало идеи, что я делаю неправильно здесь. Какое решение вы можете предложить?

Мой код:

(function(foo){ 

    // 1.) open new tab/window 
    var myWindow = window.open('http://www.fakespot.com/', '_blank');  
    myWindow.focus(); 

    // 2.) input + click submit button 
    document.getElementById("url").value = "test input"; 
    document.getElementsByName("commit")[0].click(); 
})('foo') 

Не работает либо:

... 
    myWindow.document.getElementById("url").value = link; 
    myWindow.document.getElementsByName("commit")[0].click(); 
    ... 

Transform JavaScript в букмарклет здесь: http://chriszarate.github.io/bookmarkleter/

+0

Вам нужно будет использовать что-то вроде TaperMonkey – epascarello

+0

Почему Javascript подводит нас сюда? Где фактическая точка разлома? – pykong

+0

Проблема в том, что код букмарклета, который вы используете, не работает в новом окне. И с той же политикой происхождения, вам нужно будет быть на веб-сайте сначала, прежде чем щелкнуть закладку, чтобы сделать код работать. Если это правильно, вам нужно добавить код, чтобы ждать загрузки окна, чем вы можете ссылаться на элементы формы внутри страницы. – epascarello

ответ

0

Вы можете сделать то, что вы пытаетесь делать используя HTML5 localStorage. Вот пример того, как это работает. Откройте прикрепленную скрипку в 2 отдельных вкладках и передайте сообщения между ними!

// HTML (используется только для тестирования)

<!-- This is your parent window --> 
<input type="text" id="message1" /> 
<button type="button" value="Send Message" onclick="updateStorageEvent()">Send Message</button> 

<!-- This would be your theoretical second window --> 
<!-- Open this fiddle in a second tab then send messages to see the results in the other window--> 
<p id="messageReceived"></p> 

// JS

// Parent Window 
var data = document.getElementById('message1'); 

function updateStorageEvent() { 
    localStorage.setItem('storage-event', data.value); 
} 

// Target Window 
var output = document.getElementById('messageReceived'); 

window.addEventListener('storage', function (event) { 
    output.innerHTML = event.newValue; 
}); 

Вот ссылка на скрипку, показывая эту работу. Щелкните правой кнопкой мыши ссылку и выберите пункт «Открыть» на новой вкладке. Сделайте это дважды, и вы можете передавать сообщения между ними. http://jsfiddle.net/wpwelch/khje9Lh3/2/

+0

THX, buzzsaw! Мне нужно около трех дней учиться этому. – pykong

+0

Я попытался, но я не вижу, как использование HTML5 localStorage будет обходить проблему политики происхождения. Вашему предлагаемому решению потребуется открыть целевой сайт вручную, что не соответствует самой цели букмарклета, который мне нравится кодировать. Или моя реализация неверна? – pykong