是否存在jQuery命令用于获取用户的Skype联系人?
实现内部新闻动态页的邮件与Skype分享按钮
我刚好做过类似的企业内部分享功能,给你梳理下具体实现方案,重点解决Skype联系人选择+带链接启动对话的需求:
一、邮件分享按钮(快速实现)
邮件分享很简单,直接用原生的mailto URI就能搞定,不需要额外依赖:
<button class="share-email-btn">分享到邮件</button> <script> document.querySelector('.share-email-btn').addEventListener('click', () => { const postTitle = document.querySelector('.news-post-title').textContent; const postUrl = window.location.href; // 构造mailto链接,自动填充主题和正文 const mailtoLink = `mailto:?subject=分享新闻:${encodeURIComponent(postTitle)}&body=我觉得这篇新闻不错:${encodeURIComponent(postUrl)}`; window.open(mailtoLink); }); </script>
点击按钮会唤起用户默认邮件客户端,自动填充新闻标题和链接,非常省心。
二、Skype分享按钮(核心需求实现)
要实现获取联系人→选择联系人→启动带链接的对话这个流程,我们可以借助Skype的Web API来完成,具体步骤如下:
1. 引入Skype Web SDK脚本
首先在页面底部加载Skype的SDK(如果是企业内部环境,可能需要用企业版Skype的SDK地址,这里用公开版示例):
<script src="https://swx.cdn.skype.com/shared/v/1.2.15/SkypeBootstrap.min.js"></script>
2. 实现Skype登录与联系人获取
因为要访问用户的Skype联系人,需要先让用户登录Skype账号。这里实现一个简单的登录+联系人列表展示逻辑:
<button class="share-skype-btn">分享到Skype</button> <!-- 用于展示联系人选择的弹窗 --> <div id="skype-contact-modal" style="display:none; position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); background:white; padding:20px; border:1px solid #ccc;"> <h3>选择联系人</h3> <ul id="skype-contact-list"></ul> </div> <script> const skypeBtn = document.querySelector('.share-skype-btn'); const contactModal = document.getElementById('skype-contact-modal'); const contactList = document.getElementById('skype-contact-list'); let selectedContactId = ''; const postUrl = window.location.href; const postTitle = document.querySelector('.news-post-title').textContent; // 初始化Skype SDK Skype.initialize({ apiKey: 'SWX-BUILD-SDK' // 公开版SDK的默认密钥,企业环境请替换为自己的密钥 }, function(api) { const app = api.application; app.signInManager.signIn().then(() => { // 登录成功后获取联系人列表 return app.personsAndGroupsManager.all.persons(); }).then(persons => { skypeBtn.addEventListener('click', () => { // 清空之前的联系人列表 contactList.innerHTML = ''; // 渲染联系人列表 persons.forEach(person => { if (person.avatarUrl && person.displayName) { const li = document.createElement('li'); li.innerHTML = `<img src="${person.avatarUrl}" width="30" /> ${person.displayName}`; li.style.cursor = 'pointer'; li.addEventListener('click', () => { // 存储选中的联系人ID selectedContactId = person.id(); // 关闭弹窗并启动对话 contactModal.style.display = 'none'; startSkypeConversation(); }); contactList.appendChild(li); } }); // 显示联系人选择弹窗 contactModal.style.display = 'block'; }); }).catch(err => { console.error('Skype初始化/登录失败:', err); alert('无法连接Skype,请检查网络或账号状态'); }); }); // 启动带链接的Skype对话 function startSkypeConversation() { if (!selectedContactId) return; // 构造Skype对话URI,附带新闻链接和标题 const skypeUri = `skype:${selectedContactId}?chat&message=我分享了一篇新闻:${encodeURIComponent(postTitle)}%0A${encodeURIComponent(postUrl)}`; window.open(skypeUri); } </script>
3. 关键细节说明
- 联系人权限:用户登录Skype后,SDK会请求访问联系人的权限,需要用户授权才能获取列表
- 企业环境适配:如果是企业内部的Skype for Business,需要替换SDK地址和
apiKey为企业版的对应参数,并且可能集成AD单点登录 - 弹窗样式优化:示例里的弹窗是基础样式,你可以根据公司内部UI规范美化成模态框
三、额外优化建议
- 可以给分享按钮添加加载状态,避免用户重复点击
- 对于Skype登录失败的情况,添加 fallback 方案(比如让用户手动输入Skype ID)
- 邮件分享可以支持抄送、密送等额外参数,根据需求调整
mailto链接
内容的提问来源于stack exchange,提问作者Chester




