如何创建一个使用javascript修改自己的bookmarklet

时间:2014-09-16 03:44:14

标签: javascript jquery firefox bookmarklet

我可以将此链接拖动到firefox工具栏以创建书签,其名称为" Alert Bla",但问题是如何自定义标题" Alert Bla"每次我拖。我想生成书签的名称"动态"所以每次我将这个标签拖到书签工具栏上时," name"是不同的?

" Alert Bla"应该由其他javascript函数生成,但是在html页面上,它仍然应该显示" Alert Bla",这可能吗?

也许在bookmarklet中,修改"最新"的名称。创建书签作为解决方法?

<html>
<body>
<a href="javascript:alert('xxx')">Alert Bla</a>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

根据您的描述,您想要的是不可能的。您认为您将从网页中包含的JavaScript代码访问浏览器的书签。出于安全原因,这是不允许的。如果你的JS代码被允许更改拖动开始后拖动的任何内容,那么这将是一个严重的安全漏洞。一旦发生丢弃,它就不会被放入HTML控制的内容中,因此您无权访问它。

显然,您可以在事件中将HTML文档中的名称更改为新名称。根据您希望UI的工作方式,可以选择各种事件。然后,用户可以使用新名称将链接拖到书签区域中以创建书签。

您使用Firefox对此进行了标记,因此我应该提及:您可以创建一个执行此操作的Firefox扩展程序。但是,它可以这样做,因为它在一个明显更高的安全上下文中运行,并且可以访问所有书签等。

答案 1 :(得分:0)

您可以通过在显示给用户的文本上放置一个不可见的锚标记来实现此效果。当用户通过拖动来创建书签时,他们会改为拖动不可见的锚。

以下是css可能的示例,其中#myBookmarklet是锚标记的ID,#linkText是向用户显示的内容:

#myBookmarklet {
    display: block;
    position: relative;
    width: 170px;
    height: 20px;    
    font-size: 0px;
}
#linkText {
    margin-top: -20px;
    text-decoration:underline;
    color: blue;
}

相关标记:

<div id="wrapper"> 
    <a href="javascript:alert('xxx')" id="myBookmarklet">Dynamic Text</a> 
    <div id="linkText">Draggable Bookmarklet</div>
</div>

现在剩下的就是添加一些javascript事件处理程序来检测链接何时被拖动。不幸的是,您无法判断用户是否通过拖动链接制作了书签,您只能告诉它已被拖动。

以下是JS Fiddle

的示例