Автоматически загружать букмарклет на веб-странице как расширение Google Chrome - PullRequest
0 голосов
/ 23 января 2012

По сути, я создал букмарклет, и мне бы хотелось, чтобы он запускался при открытии определенного URL-адреса с подстановочными символами.По некоторым причинам он не будет просто работать как javascript в расширении Chrome, и я устал от попыток.

Что Я думаю, может сработать, это сделать расширение, которое имеет content_script для указанных страниц (что позволяет использовать подстановочный знак через match), и каким-то образом заставляет его делать то же самое, что было бы, если бы пользователь щелкнул букмарклет на панели закладок .

Однако я не знаю, как это сделать.

Следует отметить, что он мне нужен для доступа к глобальной области действия страницы , т. Е. Для выхода изпесочница расширения (что возможно, и было подтверждено, что возможно по замыслу в Chromium bug tracker).

Итак, вопрос снова: как, изcontent_script, могу ли я «загрузить букмарклет» (другими словами, как преобразовать букмарклет в расширение Google Chrome ).У меня это тоже в простом javascript, если это может быть полезным.

Это букмарклет, на случай, если кто-то захочет проверить его.Он предназначен для использования в my.deviantart.com/messages/* (но вам нужна учетная запись и сообщения в папке «Входящие», чтобы увидеть эффект зависания поверх ссылки на «отклонение», и он покажет всплывающую подсказку сего эскиз).

( Редактировать: Вот попытка расширения , опубликованная в комментариях к ответу)

Ответы [ 3 ]

1 голос
/ 24 января 2012

Вы можете совершать междоменные вызовы из скрипта контента, если вы вставите URL-адрес в часть полномочий вашего манифеста ...
http://code.google.com/chrome/extensions/xhr.html

То, что, казалось, задыхаетсябыл обратный вызов, который вы указали в URL-адресе запроса, и он не нужен, поэтому я удалил его.
Вот рабочая версия вашего кода ....
Манифест

{
  "name": "dA Tooltip Thumbnail",
  "version": "1.0.0",
  "description": "What the name says.",
  "permissions": [
    "http://backend.deviantart.com/*"
  ],
  "icons": {
    "48" : "sample-48.png",
    "128" : "sample-128.png"
  },
  "content_scripts": [
    {
      "matches": ["http://my.deviantart.com/messages/*"],
      "js" : ["jquery-1.7.1.min.js","contentscript.js"]
    }
  ]
}

ContentScript

$(".mcb-title a:first-child").each(function() {
    var b=$(this).attr("href");
    null!=b.match(/https?:\/\/fav\.me\/.*|https?:\/\/.*\.deviantart\.com\/art.*/)&&"true"!=$(this).attr("da-message-preview-attached")&&$.getJSON("http://backend.deviantart.com/oembed?url="+encodeURIComponent(b),$.proxy(function(b) {
        $(this).addClass("da-message-preview").attr("rel",b.thumbnail_url).attr("da-message-preview-attached","true");
        $(this).hover(function(a) {
            window.daMessagePreviewTitle=this.title;
            this.title="";
            $("body").append('<p id="da-message-preview"><img src="'+this.rel+'"/></p>');
            $("#da-message-preview").css( {top:a.pageY-10+"px",left:a.pageX+30+"px",position:"absolute",border:"1px solid #666",background:"#EEE",padding:"5px",display:"none","-webkit-border-radius":"6px","-moz-border-radius":"6px","border-radius":"6px","-webkit-box-shadow":"0px 2px 8px #000","-moz-box-shadow":"0px 2px 8px #000","box-shadow":"0px 2px 8px #000","z-index":"123456"}).fadeIn("fast")
        },function() {
            $("#da-message-preview").remove()
        });
        $(this).mousemove(function(a) {
            $("#da-message-preview").css("top",a.pageY-10+"px").css("left",a.pageX+30+"px")
        })
    },this))

});  

Единственная ошибка, которую я заметил после изменений, это попытка получить URL, который получает 404 ...
http://backend.deviantart.com/oembed?url=http%3A%2F%2Fnews.deviantart.com%2Farticle%2F143885%2F
... небольшая ошибка, я оставлю это на ваше усмотрение, чтобы избавиться от этого;).
О, и я достал таймер, это действительно нужно?Разве вы не будете переходить по другому URL-адресу при нажатии на галерею? ... потому что, если вы это сделаете, то скрипт контента будет повторно введен (вам может понадобиться добавить больше совпадений для этого, на самом деле не выглядело).

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

Практически нет необходимости выполнять преобразование из букмарклета в расширение Chrome (при условии, что букмарклет получает доступ только к элементам DOM - критерию, которому, по-видимому, соответствует ваше расширение).Просто вставьте JavaScript в content_script.js.

вашего расширения. Обратите внимание, что ваш букмарклет использует jQuery.Вы также должны будете встроить это в свой контент-скрипт. См. Здесь , как это сделать.

Еще одно примечание.Вам не нужно использовать какую-то ошибку, чтобы «вырваться» из расширения;По своему дизайну расширениям Chrome разрешен доступ к элементам DOM страницы, но больше ничего внутри пространства имен JavaScript.Другими словами, если страница загрузила некоторые сверхсекретные переменные в var bob = 'My secret!!!1', ваше расширение не сможет получить доступ к bob и прочитать его значение.С другой стороны, если значение bob было загружено в тег span, ваше расширение может найти этот тег и прочитать его, поскольку оно является частью DOM.

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

Я думаю, что вы ищете Message Passing:

http://code.google.com/chrome/extensions/messaging.html

С его помощью вы можете передавать события из вашего content_script в фоновый скрипт.На фоновой странице вы получите все возможности Chrome Extension.

...