Вот простая директива реализации этой функции:
angular.module("myApp", [])
.directive("bookmarkPage", function ($window, $location) {
return {
restrict: "AEC",
link: function (scope, element, attrs) {
$(element).click(function (e) {
var bookmarkURL = window.location.href;
var bookmarkTitle = document.title;
var triggerDefault = false;
if (window.sidebar && window.sidebar.addPanel) {
// Firefox version < 23
window.sidebar.addPanel(bookmarkTitle, bookmarkURL, '');
} else if ((window.sidebar && (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)) || (window.opera && window.print)) {
// Firefox version >= 23 and Opera Hotlist
var $this = $(this);
$this.attr('href', bookmarkURL);
$this.attr('title', bookmarkTitle);
$this.attr('rel', 'sidebar');
$this.off(e);
triggerDefault = true;
} else if (window.external && ('AddFavorite' in window.external)) {
// IE Favorite
window.external.AddFavorite(bookmarkURL, bookmarkTitle);
} else {
// WebKit - Safari/Chrome
alert('Press ' + (navigator.userAgent.toLowerCase().indexOf('mac') != -1 ? 'Cmd' : 'Ctrl') + '+D to bookmark this page.');
}
return triggerDefault;
});
}
}
});
Тем не менее, вы можете заменить те window
и window.loaction
с $window
и $location
, чтобы сделать его легко проверяемым.
В вашем HTML:
<a id="bookmark-this" href="#" title="Bookmark This Page" bookmark-page>Bookmark This Page</a>
спасибо, это работает хорошо для хрома (то есть, отображать предупреждение говорил мне нажать Ctrl-D), но с Firefox он дает мне следующую угловую ошибку : «TypeError: a.split не является функцией» (мне также пришлось добавить «var $ = angular.element;») – opensas
Нет. И $, и angular.element не одинаковы. – mohamedrias
Я пробовал использовать jquery's $, но он тоже не работал ... – opensas