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

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

2015-07-20 十有三 0 浏览:6590 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广告位会展示百度联盟的广告

相关文章
  • 解决CKEditor中img标签自动添加style样式的问题-禁止自动设置width和height
  • limarquee轮番插件图片略微抖动的问题
  • HTML小技巧:使用CSS3属性绘制圆形元素和图片
  • KindEditor禁止用户输入a标签链接以及只允许指定HTML标签输入的方法和技巧
  • 百度站内搜索如何设置和使用自定义样式设计(即不使用模板,使用自定义的模板)
  • JavaScript isNaN() 函数

文章分类

.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安装升级失败和在安装前需要更新的问题
  • VS重构重命名的快捷键
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件

推荐文章

  • Windows Server 2012 提供程序NtpClient:在尝试联系它8次以后没有收到来自手动配置的对等机ntp1.cloud.aliyuncs.com,0x1的有效响应
  • ASP.NET MVC全局异常处理和捕获的思路
  • 只允许一个 <configSections> 元素。它必须是根 <configuration> 元素的第一个子元素- HTTP Error 500.19
  • 解决IIS ASP.NET 网站发布后出现错误 Unable to connect to any of the specified MySQL hosts
  • JSON Hijacking 翻译对照

友情链接

  • Passingwind的博客
  • 码友网

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