Подтвердить что ты не робот

Добавление favicon в javascript Bookmarklet (использует window.open)

У меня есть букмарклет, который запускает функцию window.open javascript, чтобы открыть небольшое окно с моим букмарклетом - внешнюю функцию, используемую для связи между любым сайтом и моим сервером. Я бы хотел, чтобы favicon отображался, когда букмарклет добавлен на панель закладок. Я понимаю, что букмарклет - это javascript, нет привязанного к нему домена, поэтому это будет сложно или невозможно достичь этой цели.

Мое понимание проблемы:

Favicons легко понять, это ссылка в заголовке HTML-документа. Браузер может вытащить это при закладке фактического сайта по ссылке. Однако, как вы видите, мой букмарклет сработал с кодом запуска javascript, где не существует HTML, поэтому нет ссылки на favicon. Я еще не готов сдаться, но я чувствую, что есть какая-то инъекция, которую можно сделать...

На данный момент код запуска букмарклета выглядит следующим образом:

Текущий Script - букмарклет, no favicon (обратите внимание, что весь код формируется с разрывами строк - не будет работать во всех браузерах, обычно в одной строке)

javascript:void(window.open(
        'http://mydomain.com/bookmarklet/form?u='
        +encodeURIComponent(location.href)+
        't='+encodeURIComponent(document.title),
        'test','status=0,toolbar=0,location=0,menubar=0,
         resizable=false,scrollbars=false,height=379,width=379'
        ));

Ближайшая вещь, которую я нашел для решения, выглядит следующим образом, но она не открывает новое окно - просто создает новую вкладку с html в качестве страницы:

Рабочий значок, без окна букмарклета

javascript:'<!DOCTYPE html>
    <html><head>
    <title>Hello World</title>
    <link rel="icon" type="image/png" href="#" onclick="location.href='http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png'; return false;" />
    </head>
    <body>Hello World</body>
    </html>';

Я попробовал комбинацию из двух, но, похоже, не использовал значок. Мне было бы интересно узнать, может ли кто-нибудь увидеть способ обхода. Я думаю, что это возможно, я просто не думаю, что он настроен правильно, как я пытался.

Мой гибрид двух - букмарклет, но не favicon

javascript:'<!DOCTYPE html>
    <html><head>
    <title>Hello World</title>
    <link rel="icon" type="image/png" href="#" onclick="location.href='http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png'; return false;" />
    </head><body>Hello World</body></html>';
    window.open('http://mydomain.com/bookmarklet/form?u='
    +encodeURIComponent(location.href)+
    '&t='+encodeURIComponent(document.title),
    'test',
    'status=0,toolbar=0,location=0,menubar=0,resizable=false,
     scrollbars=false,height=379,width=379').void(0);

Что я сделал, так это использование структуры html перед запуском window.open(), это успешно открыло мой букмарклет в новом окне, но значок значка не появился для значка закладки.


Логическое решение:

Мои мысли по этому поводу состоят в том, чтобы указать букмарклет на страницу, которая представляет собой просто файл HTML со ссылкой favicon и запуск Script в <head>. Тем не менее, я не хочу этого открытия на новой вкладке с пустым файлом HTML, который затем запускает всплывающее окно.. Обходное решение..?


Существует аналогичный вопрос, но я, похоже, не нашел ответ, который я ищу:

Как установить значки/значки при перемещении букмарклета на панель инструментов?

Источник для работы favicon javascript (без букмарклета):

http://www.tapper-ware.net/blog/?p=97

Мне было бы интересно, какие ваши текущие знания/мысли об этом будут

4b9b3361

Ответ 1

Некоторые из вещей, которые я пробовал, возможно, заставят вас немного больше:

Добавить новый элемент ссылки в текущий документ:

javascript: var newLink = document.createElement('link');
newLink.setAttribute('rel','icon');
newLink.setAttribute('type','image/png');
newLink.setAttribute('href','http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png');
document.querySelector('head').appendChild(newLink);
void(0);

Обратите внимание, что я использовал querySelector из-за тестирования IE (хотя работает и в современных браузерах). С Chrome и FF я продолжал получать недопустимый символ при попытке создать элемент, поэтому мне пришлось выполнять кусочную настройку атрибута.

Пробовал использовать кодированную строку с кодировкой base64, используя схему URI "data: image/png; base64, iVBORw0KGgoAAAA...", но это ничего не помогло из-за того, что мне все равно пришлось установить его в текущий HTML-код текст (который я мог бы сделать, но столкнулся с той же проблемой, что и выше, без букмарклета).

Может быть, это невозможно сделать из-за проблем с сайтом? Не уверен... В любом случае, действительно любопытно узнать, что вы придумали (если вам удастся что-то придумать).

Ответ 2

Я попытался и повторил попытку, и мой первый вывод был: "Это не может быть сделано (по крайней мере, не в FF4 на Ubuntu 11.04)". Вам нужно (я думаю) простое решение для ваших посетителей сайта (перетащите и нажмите, добавьте закладку с 1 кликом...).

Я нашел обходной путь, он выполняет эту работу, но он немного глючит (возможно, кто-то может помочь исправить его).
ПЛЮСЫ:

  • добавить значок в букмарклет
  • он использует windows.open
  • не оставляет пустых страниц за

МИНУСЫ:

  • он перезагружает текущую страницу (вместо того, чтобы оставить страницу позади)
  • Невозможно сделать блокировщик Firefox POP-ul разрешить "javascript:" сгенерированную HTML-страницу для загрузки POP-ups, поэтому вам нужно нажать "Разрешить" каждый раз

Это код:

<a href="javascript:'&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;link rel=&quot;icon&quot; type=&quot;image/png&quot; href=&quot;http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png&quot; /&gt;&lt;/head&gt;&lt;body onLoad=&quot;window.open(\'http://example.com',\'test\',\'status=0,toolbar=0,location=0,menubar=0,resizable=false,scrollbars=false,height=379,width=379\');setTimeout(\'history.back(-1);\',100);&quot;&gt;&lt;/body&gt;&lt;/html&gt;';">Bookmarklet</a>

Это ссылка, которую вы положили на свою страницу, пользователю нужно перетащить эту ссылку на панель закладок (вы можете использовать что-то вроде Добавить закладку Script для добавления его в качестве закладки с 1 кликом), закладка не имеет значка, пока пользователь не нажмет его хотя бы один раз.

Итак, как это надо работать:
1. перенаправить пользователя на сгенерированную HTML-страницу из букмарклета (что делает возможной ICON)
2. onLoad откройте окно, которое вам нужно, используя " windows.open"
3. перенаправить страницу назад с помощью history.back(-1) "

В теории everithing происходит так быстро, что пользователь не видит новую страницу, только что текущая страница перезагружается, и появляются новые окна.

Проблема:
1. Я использую setTimeout для history.back beacause window.open заблокирован Firefox, поэтому мне нужно щелкнуть разрешить каждый раз (если кто-то может это исправить... у нас есть шанс использовать это, развить его дальше:))

Я знаю, что это не надежное решение, но это единственное решение, которое я получил до сих пор.

Надеюсь, это немного поможет.:)

Ответ 3

"Мне не нужно это открытие на новой вкладке с пустым файлом HTML, который затем запускает всплывающее окно.. Обходное решение..?

Если вы действительно визуальный эффект, вы можете попробовать запустить пустой HTML в скрытом iframe, а затем запустить javascript.

Надеюсь, что поможет

Ответ 4

Это может быть не решение, которое вы хотите, особенно если вы не используете Firefox, но я использую надстройку, называемую Закладка Favicon Changer, чтобы установить значок на моих букмарклетах, и он отлично работает.