通过Javascript Bookmarklet保存浏览器历史记录

通过Javascript Bookmarklet保存浏览器历史记录,javascript,ajax,bookmarklet,browser-history,Javascript,Ajax,Bookmarklet,Browser History,我正在制作一个书签,当你点击它时,它会提示链接。我想象在点击其中一个链接后,当有人点击后退按钮时,其意图是返回bookmarklet建议的链接列表 然而,我认为没有办法通过bookmarklet实现这一点,bookmarklet可以在任何网页上运行。当您单击一个建议的链接,然后返回时,会显示原始页面,而不会显示bookmarklet中的任何Javascript,这通常会显示页面顶部的链接列表 当然,用户可以再次单击bookmarklet,但如果不需要的话,那就太好了。除了通过我主持的网站重定向(

我正在制作一个书签,当你点击它时,它会提示链接。我想象在点击其中一个链接后,当有人点击后退按钮时,其意图是返回bookmarklet建议的链接列表

然而,我认为没有办法通过bookmarklet实现这一点,bookmarklet可以在任何网页上运行。当您单击一个建议的链接,然后返回时,会显示原始页面,而不会显示bookmarklet中的任何Javascript,这通常会显示页面顶部的链接列表


当然,用户可以再次单击bookmarklet,但如果不需要的话,那就太好了。除了通过我主持的网站重定向(这在我看来是一个可怕的解决方案)之外,还有什么方法可以做到这一点吗?

没有,我不相信有任何方法可以做到这一点-据我所知,在页面加载时不可能自动触发bookmarklet javascript-用户必须单击才能执行

如果您坚持使用此功能,则需要开发浏览器扩展。例如,这将允许您向浏览器窗口添加一个新的持久性框架,您可以在其中显示建议的链接。Mozilla/Firefox的开发非常简单,因为它都是基于javascript和XUL(Mozilla的GUI标记语言)的。这里有很多教程和文档:

你也可以为IE开发扩展,尽管我没有这方面的经验。这个问题的答案可能会帮助你开始


编辑:我想到了一个可能的解决方法:您的bookmarklet可以在当前窗口中创建一个新页面,在容器中使用建议的链接,并在iframe中呈现原始页面。单击任何建议的链接都会更新iframe。在没有实际尝试的情况下,不确定这可能会产生什么实际问题(例如,某些站点-如这样-不会在iframe中呈现,某些链接的target=“\u blank”将在新窗口中打开),或者不确定您是否希望使用这种格式

一个bookmarklet怎么样?它将一些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 + '");' ;
var links=“建议链接”;
链接+=“

”; 链接+=”; window.location='javascript:document.write(“+links+”);
你必须小心你的报价,以确保正确的字符串得到显示,但经过快速测试,它似乎尊重后退按钮

这里有一个示例:-它在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>

JS-Bin示例bookmarklet

“+”

“+”;window.location=“javascript:document.write(%27”+l++%27);“;}()”>示例书签-将我拖到工具栏


如果浏览器更改页面,则您的bookmarklet将失去控制。因此,一种解决方案是不更改页面

您可以在框架或iframe中打开建议链接。如果您愿意,您可以让框架填充窗口,只要有办法再次查看建议链接列表

注意这对stackoverflow不起作用!它们会断开帧grrr


这里有一个有点相关的例子:

如果当用户遵循其中一个建议的链接(例如,将#info=…添加到链接的URL)时,您可以将数据转发,那么用户可以通过再次激活bookmarklet来带回链接列表,而无需返回浏览器


如果bookmarklet位于工具栏上,那么这将是一个一键操作。但这可能会引发一个新问题:当bookmarklet试图向您显示上一页的结果时,如何获得新的结果!

解决方法的唯一问题是许多网站都运行Framebuster。无论如何,扩展似乎都将被删除e是唯一的前进之路,但我仍在等待任何其他可能出现的答案。通过网站重定向至少可以很好地工作,因为URL将成为浏览器历史的一部分,很容易导航回。您只需要有人为您托管一个静态HTML+Javascript页面。好主意。您的示例在中对我不起作用虽然是Chrome,但如果它适用于其他浏览器,这将超出我的预期。我最终在FF和IE中测试了bookmarklet-后退按钮的行为仅在FF中正确;IE用户必须再次单击按钮才能获得链接列表。我手边没有Chrome安装,但我会看看是否能得到任何反馈……ehsanul:当你说它在Chrome中不工作时,bookmarklet可以工作,但是back按钮不能工作吗?或者bookmarklet根本不能工作吗?我还没有真正在跨浏览器bookmarklet上工作过,所以我不确定。。。