Сохранение истории браузера с помощью Javascript Bookmarklet
Я работаю над букмарклетом, который предлагает ссылки, когда вы нажимаете на него. Я полагаю, что после нажатия на одну из этих ссылок, когда кто-то нажимает кнопку "Назад", намеревается вернуться к списку ссылок, которые предлагает букмарклет.
Однако я не вижу способа сделать это возможным с помощью букмарклета, который может быть запущен на любой веб-странице. Когда вы щелкаете предлагаемую ссылку и затем возвращаетесь назад, открывается исходная страница без какого-либо Javascript из букмарклета, который обычно выводит список ссылок в верхней части страницы.
Конечно, пользователь может просто снова щелкнуть букмарклет, но было бы неплохо, если бы это не требовалось. Есть ли способ сделать это, кроме перенаправления через веб-сайт, размещенный мной (это ужасное решение IMO)?
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>
Нет, я не верю, что есть какой-либо способ сделать это - насколько я знаю, невозможно автоматически вызвать JavaScript-код bookmarklet при загрузке страницы - пользователь должен щелкнуть, чтобы выполнить его.
Если вы настаиваете на этой функциональности, вам нужно будет разработать расширение для браузера. Это, например, позволит вам добавить новый постоянный фрейм в окно браузера, в котором вы можете отобразить предложенные ссылки. Mozilla/Firefox довольно прост для разработки, поскольку он основан на JavaScript и XUL (язык разметки GUI Mozilla). Множество учебников и документов здесь: https://developer.mozilla.org/en/extensions
Вы также можете разрабатывать расширения для IE, хотя у меня нет опыта в этом. Ответы на этот вопрос Как вы разрабатываете плагин для IE? может помочь вам начать.
Редактировать: я подумал о возможном обходном пути: ваш букмарклет может создать новую страницу в текущем окне, с предлагаемыми ссылками в контейнере, и исходную страницу, отображаемую в iframe. Нажатие на любую из предложенных ссылок приведет к обновлению iframe. Не пытаясь на самом деле, не уверен, какие практические проблемы могут возникнуть (например, некоторые сайты - например, SO - не будут отображаться в iframe, а некоторые ссылки будут иметь target = "_ blank" и открываться в новом окне), или этот формат тебе бы хотелось.
Если вы можете перенести данные вперед, когда пользователь переходит по одной из предложенных ссылок (например, добавить #info=... к URL-адресу ссылки), тогда пользователь может вернуть список ссылок, снова активировав букмарклет, без необходимости вернуться в свой браузер.
Если букмарклет находится на панели инструментов, то это будет операция в один клик. Но может возникнуть одна новая проблема: как получить свежие результаты, когда букмарклет пытается показать вам результаты с предыдущей страницы!
Если браузер изменит страницу, ваш букмарклет потеряет контроль. Таким образом, одно решение не состоит в том, чтобы изменить страницу.
Вы можете открыть предложенные ссылки в рамке или в фрейме. Вы можете заставить фрейм заполнять окно, если хотите, если есть какой-то способ снова увидеть список предлагаемых ссылок.
Обратите внимание, что это не будет работать на стеке потока! У них прорыв фреймов гррр.
Вот несколько похожий пример: http://hwi.ath.cx/joeys_bookmarklets.html