Создание букмарклета в javascript - PullRequest
4 голосов
/ 19 июня 2011

Я пытаюсь сделать букмарклет для моего сайта.

Я создал php-страницу, которая при отправке GET, например, www.website.com/index.html?a=banana возвращает echo 'stand';

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

Как я могу это сделать?

Букмарклет Instapaper делает это ...

javascript:
function%20iprl5(){
  var%20d=document,z=d.createElement('scr'+'ipt'),b=d.body,l=d.location;
  try{
    if(!b)
      throw(0);
    d.title='(Saving...)%20'+d.title;
    z.setAttribute('src',l.protocol+'//www.instapaper.com/j/deyNbbpjuSei?u='+encodeURIComponent(l.href)+'&t='+(new%20Date().getTime()));
    b.appendChild(z);
  }
  catch(e){
    alert('Please%20wait%20until%20the%20page%20has%20loaded.');
  }
}
iprl5();
void(0)

1 Ответ

2 голосов
/ 19 июня 2011

Букмарклет - это фрагмент javascript, который запускается в объеме страницы, на которой вы находитесь.

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

javascript:
function%20iprl5(){
  var%20d=document; // shorten document object
  var z=d.createElement('scr'+'ipt'); // create a script tag
  var b=d.body; // get document.body
  var l=d.location; // get document.location - I would get document.URL instead
  try{
    if(!b) throw(0); // if there is no body object available
    d.title='(Saving...)%20'+d.title; // set document.title
    z.setAttribute('src',l.protocol+'//www.yourserver.com/test.php?u='+encodeURIComponent(l.href)+'&time='+(new%20Date().getTime())); // create the script url
    b.appendChild(z); // append it to the body - I would append to head myself
  }
  catch(e){ // give an error
    alert('Please%20wait%20until%20the%20page%20has%20loaded.');
  }
}
iprl5(); // call it
void(0); // make sure it does not return a value to the window

вставить это view-source:http://www.instapaper.com/j/deyNbbpjuSei?u=http://www.stackoverflow.com в адресную строку, чтобы увидеть количество материала, возвращенного как часть страницы, на которой вы находитесь

...