Создание букмарклета - PullRequest
       7

Создание букмарклета

0 голосов
/ 23 января 2011

(вопрос улучшен)

Здравствуйте, Я пытаюсь сделать букмарклет. Букмарклет будет наложен и откроется в правом верхнем углу страницы. Вы можете увидеть типы закладок [здесь] [1] я хочу сделать оверлейный интерфейс.

Вот мой код JavaScript для букмарклета:

javascript:void((function(){var%20e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('src','http://www.girmiyor.co.cc/bookmarklet.js');document.body.appendChild(e)})())

Bookmarklet будет вызывать файл bookmarklet.js. Содержимое bookmarklet.js:

document.body.innerHTML += "<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'></script>";

document.body.innerHTML += "<div class='result' style='background-color:grey;z-index:1000;position:absolute;right:0;top:0' width='300' height='250'></div>";



var site = location.href;

    $.get("http://www.girmiyor.co.cc/c.php",{ q: site}, function(data){
                        $('.result').html(data);
                });

ПОЛУЧИТЬ отправку запроса, я могу видеть его через Firebug. Но ничего не вернулось.

Вы можете мне помочь?

Ответы [ 3 ]

2 голосов
/ 23 января 2011

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

e=document.createElement('script');
e.type='text/javascript';
e.src='http://domain.tld/file.js'; //optionally pass GET params
document.getElementsByTagName('head')[0].appendChild(e); //optionally, you could append to the <body>

. Если вы затем посмотрите на файлы, включенные в этот метод, вы увидите, как создается оверлей.Я вставил важный фрагмент из файла friendfeed , в который помещается оверлейный div, поищите этот раздел и изучите его:

// Create the share dialog in the corner of the window
var container = div();
container.id = "ff__container";
container.style.position = "absolute";
container.style.top = scrollPos().y + "px";
container.style.right = "0";
container.style.width = "auto";
container.style.zIndex = 100000;

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

0 голосов
/ 24 января 2011

Текущая версия вашего bookmarklet.js не работает (так как я пишу этот ответ), потому что после var data =.

пропущена цитата. Судя по всему, у меня есть несколько непроверенных теорий относительно вашей проблемы:

  1. Вы заменяете body innerHTML, где работает ваш собственный скрипт.И к тому времени, когда скрипт заканчивается, jQuery еще даже не загружается.Возможно, вам придется приостановить выполнение скрипта и дождаться загрузки jQuery.Попробуйте что-то вроде помещения вашего $.get() в функцию, которая вызывается после window.setTimeout(), и, предпочтительно, которая проверяет существование $typeof($) != 'undefined') и либо ждет больше, либо запускает ваш $.get().
  2. Вы загружаете jQuery через HTTPS, поэтому политики браузера могут помешать $.get получать данные из HTTP
  3. Установка атрибута type ссылки jQuery <script> для text/javascript не должна быть вашейпроблема, но это определенно не помешает.
0 голосов
/ 23 января 2011

когда я добавляю этот код непосредственно в закладки Firefox, а затем нажимаю кнопку возврата на страницу и [объект XMLHttpRequest]

Это распространенная проблема с букмарклетами. Чтобы исправить это, добавьте void(0); в конец кода букмарклета. Таким образом, букмарклет не будет возвращать никакого значения, которое будет отображаться в браузере.

...