/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

研究百度分享自定义URL的BUG

2015-07-20 十有三 0 浏览:8643 Web前端 插件工具

之前有写过一篇文章:实现百度分享自定义或动态设置URL,但是有网友发现了一个问题,使用分享的复制网址功能时,URL并没有变成我们动态设置的URL。因此特地调试了下分享插件的源码,发现这应该是一个BUG。

功能演示页面地址:http://example.shiyousan.com/Files/201503/635629910383368675/baidushare.html

这个页面展示的是通过百度分享插件的API实现自定义及动态设置URL的功能,这里唯一有个遗憾的地方,点击分享按钮中的加号图标-->更多-->复制网址,如下图所示:

选择分享插件更多加号按钮

在更多选项中点击复制网址功能

发现BUG,地址并没有动态设置

到了这里就会发现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)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: Avira小红伞如何添加白名单?
  • 下一篇: 为什么谷歌adsense广告位会展示百度联盟的广告

相关文章
  • 火狐浏览器在URL中不兼容反斜杠"\"作为路径分隔
  • JavaScript isNaN() 函数
  • CKFinder 3无法删除文件和文件夹出现提示:You cannot delete files in DEMO mode
  • HTML小技巧:使用CSS3属性绘制圆形元素和图片
  • limarquee轮番插件图片略微抖动的问题
  • 研究百度分享自定义URL的BUG

文章分类

.NET技术 123 数据库 24 Web前端 21 网站建设运维 37 操作系统与应用 66 程序猿日常 11 开发工具 12 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 服务器 搞笑娱乐 好文分享 软件应用 生活知识 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • IE11无法运行JS脚本代码
  • 解决SQL Service创建链接服务器出现(null) 是无效的产品名称的问题
  • 翻译:Changes to the language setting will not take effect until the environment is restarted.
  • 解决"无法启动此程序,因为计算机中丢失cudart32_60.dll。尝试重新安装该程序以解决此问题。"
  • Visual Studio 2013 社区版和速成版之间的区别

友情链接

  • Passingwind的博客
  • 码友网

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号
闽公网安备 35020302035102号