之前有写过一篇文章:实现百度分享自定义或动态设置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)。
所以暂时没有什么较好的方法来解决这个,只能等插件更新时看看有没有修复这个问题。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/98698.html