博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
“添加到收藏夹”功能(share)
阅读量:6693 次
发布时间:2019-06-25

本文共 3953 字,大约阅读时间需要 13 分钟。

以下分享自: 

给网站添加“添加到收藏夹”理论上应该是很简单的事情,但是受到各种浏览器和操作系统的不一致的问题,使得这个问题异常的繁琐啊。

下面是梳理的一些资料,仅供参考。

 

首先是使用快捷键进行添加,如我们熟知的“Ctrl+D”,但是并不是说有的电脑都支持这么操作。键盘快捷键:Ctrl+D 仅适用于 Windows 和Linux);⌘-D 才适用于苹果机(苹果机上没有Ctrl键)。

方案一:使用Javascript模拟键盘操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
BookmarkApp =
function 
() {
    
var 
isIEmac =
false
;
    
var 
isMSIE = (-[1,]) ?
false 
:
true
;
    
var 
cjTitle =
"Welcome to CodeCTO.com"
;
    
var 
cjHref = location.href;
 
    
function 
hotKeys() {
        
var 
ua = navigator.userAgent.toLowerCase();
        
var 
str =
''
;
        
var 
isWebkit = (ua.indexOf(
'webkit'
) != - 1);
        
var 
isMac = (ua.indexOf(
'mac'
) != - 1);
 
        
if 
(ua.indexOf(
'konqueror'
) != - 1) {
            
str =
'CTRL + B'
;
// Konqueror
        
}
else 
if 
(window.home || isWebkit || isIEmac || isMac) {
            
str = (isMac ?
'Command/Cmd' 
:
'CTRL'
) +
' + D'
;
// Netscape, Safari, iCab, IE5/Mac
        
}
        
return 
((str) ?
'Press ' 
+ str +
' to bookmark this page.' 
: str);
    
}
 
    
function 
isIE8() {
        
var 
rv = -1;
        
if 
(navigator.appName ==
'Microsoft Internet Explorer'
) {
            
var 
ua = navigator.userAgent;
            
var 
re =
new 
RegExp(
"MSIE ([0-9]{1,}[\.0-9]{0,})"
);
            
if 
(re.exec(ua) !=
null
) {
                
rv = parseFloat(RegExp.$1);
            
}
        
}
        
if 
(rv > - 1) {
            
if 
(rv >= 8.0) {
                
return 
true
;
            
}
        
}
        
return 
false
;
    
}
 
    
function 
addBookmark(a) {
        
try 
{
            
if 
(
typeof 
a ==
"object" 
&& a.tagName.toLowerCase() ==
"a"
) {
                
a.style.cursor =
'pointer'
;
                
if 
((
typeof 
window.sidebar ==
"object"
) && (
typeof 
window.sidebar.addPanel ==
"function"
)) {
                    
window.sidebar.addPanel(cjTitle, cjHref,
""
);
// Gecko
                    
return 
false
;
                
}
else 
if 
(isMSIE &&
typeof 
window.external ==
"object"
) {
                    
if 
(isIE8()) {
                        
window.external.AddToFavoritesBar(cjHref, cjTitle);
// IE 8
                    
}
else 
{
                        
window.external.AddFavorite(cjHref, cjTitle);
// IE <=7
                    
}
                    
return 
false
;
                
}
else 
if 
(window.opera) {
                    
a.href = cjHref;
                    
a.title = cjTitle;
                    
a.rel =
'sidebar'
;
// Opera 7+
                    
return 
true
;
                
}
else 
{
                    
alert(hotKeys());
                
}
            
}
else 
{
                
throw 
"Error occured.\r\nNote, only A tagname is allowed!"
;
            
}
        
}
catch 
(err) {
            
alert(err);
        
}
 
    
}
 
    
return 
{
        
addBookmark : addBookmark
    
}
}();

如果嫌上面的方案比较麻烦,可以采用jQuery来快速搞定。具体实现如下: 

1
2
3
4
var 
evt = jQuery.Event(
"keypress"
);
evt.keyCode = 100;
// d
evt.ctrlKey =
true
;
$(document).trigger(evt);

方案二:采用Javascript来添加书签

以下是一段能自动把当前页面添加到浏览器书签的JavaScript 脚本,支持 FireFox,Opera 和 IE,Webkit 核心的 Safari 和Chrome 暂时没有实现类似功能的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function 
bookmark(url, title){
    
if 
(window.sidebar)
// firefox
        
window.sidebar.addPanel(title, url,
""
);
    
else 
if
(window.opera && window.print){
// opera
        
var 
elem = document.createElement(
'a'
);
        
elem.setAttribute(
'href'
,url);
        
elem.setAttribute(
'title'
,title);
        
elem.setAttribute(
'rel'
,
'sidebar'
);
        
elem.click();
    
}
    
else 
if
(document.all)
// ie
        
window.external.AddFavorite(url, title);
    
else
        
alert(
'Your browser does not support this function.'
);
}

同样的,也提供另外的jQuery方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$(document).ready(
function
(){
$(
"a.jQueryBookmark"
).click(
function
(e){
e.preventDefault();
// this will prevent the anchor tag from going the user off to the link
var 
bookmarkUrl =
this
.href;
var 
bookmarkTitle =
this
.title;
 
if 
(window.sidebar) {
// For Mozilla Firefox Bookmark
window.sidebar.addPanel(bookmarkTitle, bookmarkUrl,
""
);
}
else 
if
( window.external || document.all) {
// For IE Favorite
window.external.AddFavorite( bookmarkUrl, bookmarkTitle);
}
else 
if
(window.opera) {
// For Opera Browsers
$(
"a.jQueryBookmark"
).attr(
"href"
,bookmarkUrl);
$(
"a.jQueryBookmark"
).attr(
"title"
,bookmarkTitle);
$(
"a.jQueryBookmark"
).attr(
"rel"
,
"sidebar"
);
}
else 
{
// for other browsers which does not support
alert(
'Your browser does not support this bookmark action'
);
return 
false
;
}
});
});

相应的HTML代码如下:

1
<
a 
href
=
"" 
title
=
"标点符的博客" 
class
=
"jQueryBookmark"
>标点符</
a
>
本文转自挨踢前端博客园博客,原文链接http://www.cnblogs.com/duanhuajian/p/3499414.html如需转载请自行联系原作者
@挨踢前端
你可能感兴趣的文章
rabbitMQ的安装和创建用户
查看>>
Struts2笔记——第一个实例HelloWorld
查看>>
Maven安装
查看>>
2.1列表相关知识点
查看>>
OpenStack images
查看>>
xsigo systems
查看>>
ofbiz ins
查看>>
iOS动画实现改变frme和contenOffset
查看>>
DroidPilot使用第一步 - 安装
查看>>
0059-乘积问题
查看>>
2019年的第一篇随笔
查看>>
关于公网ip的一些信息(摘抄)
查看>>
5分钟弄懂Docker!
查看>>
BZOJ1076:[SCOI2008]奖励关(状压DP,期望)
查看>>
BZOJ2223/3524:[POI2014] Couriers(主席树)
查看>>
MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-5]
查看>>
Nodejs 连接各种数据库集合例子
查看>>
easyui的datagrid用js插入数据等编辑功能的实现
查看>>
Windows App开发之集合控件与数据绑定
查看>>
AMD、CMD/AMD与CMD的区别
查看>>