Сохранение истории браузера с помощью букмарклета Javascript

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

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

Конечно, пользователь может просто щелкнуть букмарклет еще раз, но было бы неплохо, если бы это не требовалось. Есть ли способ сделать это, кроме перенаправления через веб-сайт, размещенный мной (что является ужасным решением, IMO)?


person ehsanul    schedule 04.12.2010    source источник
comment
Перенаправление через веб-сайт, по крайней мере, будет работать аккуратно, потому что этот URL-адрес станет частью истории браузера, и к нему будет легко вернуться. Вам нужен только кто-то, кто разместит для вас одну статическую страницу HTML+Javascript.   -  person joeytwiddle    schedule 20.12.2010


Ответы (4)


Как насчет букмарклета, который компонует HTML-код в строку, а затем использует комбинацию window.location и document.write() для его отображения?

var links = "<html><head><title>Suggested links</title></head><body>";
links += "<p><a href='http://example.com/'>Example Suggested Link</a></p>";
links += "</body></html>";
window.location = 'javascript:document.write("' + links + '");' ;

Вы должны быть осторожны с цитированием, чтобы убедиться, что отображается правильная строка, но после быстрого теста, кажется, уважает кнопку «Назад»...

Вот пример: http://jsbin.com/ebuko4 - у меня работает в Firefox, но я не не проверял в другом месте...

код:

<html>
  <head>
    <title>JS Bin Sample bookmarklet</title>
  </head>
  <body>
    <p><a href='javascript:(function(){ var l = "<html><head><title>Does this bookmarklet work?</title></head><body><p>"+ "<a href=\"http://example.com/\">Suggested link: Example.com</a></p>" + "<p><a href=\"http://example.net/\">Suggested link: Example.net</a></p>" + "</bo" + "dy></html>"; window.location = "javascript:document.write(%27" + l + "%27);"; })()'>Sample Bookmarklet - drag me to your toolbar</a></p>
  </body>
</html>
person Stobor    schedule 13.12.2010
comment
Хорошая идея. Ваш пример не работает для меня в Chrome, но если он работает для других браузеров, это будет больше, чем я надеялся. - person ehsanul; 21.12.2010
comment
В конце концов я протестировал букмарклет в FF и IE — поведение кнопки «Назад» правильно только в FF; Пользователи IE должны нажать кнопку еще раз, чтобы получить список ссылок. У меня нет под рукой установки Chrome, но я посмотрю, смогу ли я получить какие-либо отзывы по этому поводу... - person Stobor; 21.12.2010
comment
ehsanul: когда вы говорите, что это не работает в Chrome, работает ли букмарклет, но не работает кнопка «Назад»? Или букмарклет вообще не работает? Я действительно не работал над кросс-браузерными букмарклетами, поэтому я не уверен... - person Stobor; 21.12.2010

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

Если вы настаиваете на этой функциональности, вместо этого вам потребуется разработать расширение для браузера. Это, например, позволит вам добавить новый постоянный фрейм в окно браузера, в котором вы сможете отображать предлагаемые ссылки. Mozilla/Firefox довольно прост в разработке, так как все они основаны на javascript и XUL (язык разметки GUI Mozilla). Множество руководств и документации здесь: https://developer.mozilla.org/en/extensions

Вы также можете разрабатывать расширения для IE, хотя у меня нет в этом опыта. Ответы на этот вопрос Как разработать подключаемый модуль для IE? могут помочь вам начать работу.

Редактировать: я подумал о возможном обходном пути: ваш букмарклет мог создать новую страницу в текущем окне с предлагаемыми ссылками в контейнере, а исходная страница отображалась в iframe. Щелчок по любой из предложенных ссылок обновит iframe. На самом деле, не пытаясь это сделать, не уверен, какие практические проблемы могут возникнуть (например, некоторые сайты, такие как SO, не будут отображаться в iframe, а некоторые ссылки будут иметь target="_blank" и открываться в новом окне), или этот формат Вам бы хотелось.

person Richard H    schedule 07.12.2010
comment
Единственная проблема с обходным путем заключается в том, что многие веб-сайты используют фреймбастеры. В любом случае, похоже, что расширения будут единственным путем вперед, но я жду любых других ответов, которые могут появиться. - person ehsanul; 11.12.2010

Если браузер изменит страницу, ваш букмарклет потеряет контроль. Так что одно решение - не менять страницу.

Вы можете открыть предлагаемые ссылки во фрейме или iframe. Вы можете сделать так, чтобы рамка заполнила окно, если хотите, если есть способ снова увидеть список предлагаемых ссылок.

Обратите внимание, что это не будет работать в stackoverflow! Они прорыв кадров grrr.

Вот несколько похожий пример: http://hwi.ath.cx/joeys_bookmarklets.html#splitpreview< /а>

person joeytwiddle    schedule 20.12.2010

Если вы можете перенести данные вперед, когда пользователь переходит по одной из предложенных ссылок (например, добавьте #info=... к URL-адресу ссылки), то пользователь может вернуть список ссылок, снова активировав букмарклет, без необходимости вернуться в свой браузер.

Если букмарклет находится на панели инструментов, то это будет операция в один клик. Но может возникнуть одна новая проблема: как получить новые результаты, когда букмарклет пытается показать вам результаты с предыдущей страницы!

person joeytwiddle    schedule 20.12.2010