之前有写过一篇文章:实现百度分享自定义或动态设置URL,但是有网友发现了一个问题,使用分享的复制网址功能时,URL并没有变成我们动态设置的URL。因此特地调试了下分享插件的源码,发现这应该是一个BUG。
功能演示页面地址:http://example.shiyousan.com/Files/201503/635629910383368675/baidushare.html
这个页面展示的是通过百度分享插件的API实现自定义及动态设置URL的功能,这里唯一有个遗憾的地方,点击分享按钮中的加号图标-->更多-->复制网址,如下图所示:
到了这里就会发现URL并没有和其他动态设置的URL一样,而是依然保持当前页面的URL地址。
经过对插件源码的调试,最终发现只有复制地址这个功能会出现此问题。由于实现自定义URL这个功能是需要使用插件的API(即设置bdUrl属性,详细可以看官方文档),但在代码中填充复制地址URL时,并没有将我们自己设定的bdUrl赋值进去,所以造成地址是获取当前页面。
主要功能代码地址:http://bdimg.share.baidu.com/static/api/js/share.js
当我们点击复制网址按钮时,调用的是l(r)函数,部分关键代码如下:
r = {
click: 1, url: s(e),
uid: e.bdUid || "0",
to: e.__cmd,
type: "text",
pic: e.bdPic || "",
title: (e.bdText || document.title).substr(0, 300),
key: (e.bdSnsKey || {})[e.__cmd] || "", desc: e.bdDesc || "", comment: e.bdComment || "", relateUid: e.bdWbuid || "", searchPic: e.bdSearchPic || 0, sign: e.bdSign || "on", l: window._bd_share_main.n1.toString(32) + window._bd_share_main.n2.toString(32) + t.toString(32), linkid: n.getLinkId(),
firstime: a("bdshare_firstime") || ""
};
switch (e.__cmd) {
case "copy": l(r); break;
case "print": c(); break;
case "bdxc": h(); break;
case "bdysc": p(r); break;
case "weixin": d(r); break;
default: u(e, r)
}
l = function (e) {
window._bd_share_main.F.use("base/tangram", function (t) {
var r = t.T;
r.browser.ie ? (window.clipboardData.setData("text", document.title + " " + (e.bdUrl || n.getPageUrl())), alert("\u6807\u9898\u548c\u94fe\u63a5\u590d\u5236\u6210\u529f\uff0c\u60a8\u53ef\u4ee5\u63a8\u8350\u7ed9QQ/MSN\u4e0a\u7684\u597d\u53cb\u4e86\uff01")) : window.prompt("\u60a8\u4f7f\u7528\u7684\u662f\u975eIE\u6838\u5fc3\u6d4f\u89c8\u5668\uff0c\u8bf7\u6309\u4e0b Ctrl+C \u590d\u5236\u4ee3\u7801\u5230\u526a\u8d34\u677f", document.title + " " + (e.bdUrl || n.getPageUrl()))
})
}
关键代码是:e.bdUrl || n.getPageUrl(),这里主要是判断如何获取最终要显示的URL地址,由于主要函数参数r并没有正确设置bdUrl,而只设置了一个无用的url属性,所以导致最后在取值时使用的是 n.getPageUrl函数(函数功能是获取当前页面URL)。
所以暂时没有什么较好的方法来解决这个,只能等插件更新时看看有没有修复这个问题。
作者:十有三
出处:https://shiyousan.com/post/635730111495769057
版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。