Youtube订阅——解决在弹窗内使用Youtube订阅按钮高度显示不全的问题
背景:公司网站业务在做海外营销网站,为了配合营销工作,前端总要在各种地方添加各种社媒订阅(摊手.jpg);最近遇到的是在弹窗内展示公司的Youtube账号的订阅按钮。
理想:我想使用的例子是这样的:

现状:但是当我实际使用的时候,却只显示了一半,如下图:

解决问题思路:
1. 起初,我以为是加载的外部js先执行的原因,所以将script加了defer属性(延迟执行),发现没有任何效果;
2. 其次,还是老老实实去查了官方文档https://developers.google.com/youtube/subscribe/reference:
官方api提供了很多功能的go/render方法,动态渲染订阅按钮或其他功能:

3. 最后我在bootstrap弹窗加载完的钩子函数中调用了gapi.ytsubscribe.render方法,实现了功能,代码如下:
<!--#modal-sample-lg-->
<script src="https://apis.google.com/js/platform.js"></script>
<div id="yt-button-container-render" class="g-ytsubscribe"></div>
<!--#modal-sample-lg-->
<script>
$(function() {
var acount = 0;
$('#modal-sample-lg').on('shown.bs.modal', function () {
// 只加载一次,避免闪烁
if(acount === 0) {
var container = document.getElementById('yt-button-container-render');
var options = {
'channelid': 'UCv1uPumg4LFFC9qwYWKyxhw',
'layout': 'full',
'count': 'hidden',
}; gapi.ytsubscribe.render(container, options);
acount++;
}
})
})
</script>
最后:将go实现的代码放到下面:
<!-- modal-sample-lg callback begin -->
<!-- #modal-sample-lg -->
<script src="https://apis.google.com/js/platform.js"></script>
<div id="yt-button-container-go"></div>
<!-- #modal-sample-lg -->
<script>
$('#modal-sample-lg').on('shown.bs.modal', function () {
var container = document.getElementById('yt-button-container-go');
var div = '<div class="g-ytsubscribe" data-channelid="UCv1uPumg4LFFC9qwYWKyxhw" data-layout="full" count="hidden"></div>'
container.innerHTML = div;
gapi.ytsubscribe.go(container);
})
</script>
<!-- modal-sample-lg callback end -->
总结:
1. 在过程中也尝试了方法,比如说使用默认的订阅按钮(不满足需求),或者说将引入的官方js放到最后,结果都没有达到目的;
2. 究其原因,默认的订阅按钮是页面加载完后就已经加载结束了,而data-layout="full",表示高度和宽度是由内容撑开的,在初始化的时候由js动态加载的logo图片还没有加载到dom树中,高度没有被撑开,订阅按钮显示不完整;
3. 想到这里,若给订阅按钮最小高度,应该也是可以的(刚去验证了一下,果然是可以的,但是必须使用px,不可以使用rem,因为订阅按钮是使用iframe承载的......)
4. 浏览器渲染机制博大精深,继续学习~
4. 虽然Youtube订阅国内不常用,但是记录一下~
Youtube订阅——解决在弹窗内使用Youtube订阅按钮高度显示不全的问题的更多相关文章
- 解决bootstrap-table表头filter-control select控件被遮挡显示不全的问题
[本文出自天外归云的博客园] 在使用bootstrap-table的extension——filter-control时(对应表格的data-filter-control="true&quo ...
- python 1: 解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题
问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下 ...
- layer 父弹窗获取子弹窗内的dom节点元素和变量
1 var body = layer.getChildFrame('body', index); //获取子弹窗的dom节点 2 3 var iframeWin = window[layero.fin ...
- CSS背景100%平铺 浏览器缩小背景显示不全解决办法
本文我们分享前端CSS背景100%平铺,浏览器缩小背景显示不全bug解决的两个方法,如果你也遇到了,那么就可以参考下面文章. 把浏览器的窗口缩小时,拖动滚动条时你会发现原本设定的CSS背景100%平铺 ...
- paip.解决中文url路径的问题图片文件不能显示
paip.解决中文url路径的问题图片文件不能显示 #现状..中文url路径 图片文件不能显示 <img src="img/QQ截图20140401175433.jpg" w ...
- photoshop菜单显示不全的解决方法
photoshop菜单显示不全? 解决方法,选择菜单 编辑->菜单,下拉菜单选择photoshop默认值
- 解决linux下javac -version和java -version版本显示不一致
解决linux下javac -version和java -version版本显示不一致 [javascript] view plaincopy [root@localhost usr]# $JAVA_ ...
- SSRS (SQL Server Report Service) 在IE9, IE10下显示不全的解决办法
原文:SSRS (SQL Server Report Service) 在IE9, IE10下显示不全的解决办法 在做项目的过程中遇到SSRS与IE9, IE10不兼容的情况,具体表现为报表页面在IE ...
- HTML中的select下拉框内容显示不全的解决办法
HTML中的select下拉框内容显示不全的解决办法 今天,我遇到这样一个问题:查询栏中的下拉框中的内容过长,导致部分被覆盖了. 查询了一些资料,有的说用函数控制,有的说用事件控制,有的看不懂,有的实 ...
随机推荐
- 收集的照片信息都是Excel超链接?批量命名很困难?来试试这个自制的下载器吧!
项目背景 作为大学的一名班委,经常要制作各种表格.统计各种信息,成为一名合格的"表哥"是一门必修课.其实Excel的文字信息和数字信息的统计和处理还并不算难题,很多信息可以通过问卷 ...
- .net core中的那些常用的日志框架(NLog篇)
前言 咱们上回讲到,.net core中内置的Logging日志框架的使用,以及浅显的讲解,接下来,给大家介绍一个第三方日志框架(NLog). NLog简介 NLog是适用于各种.NET平台(包括.N ...
- javascript里面的this指向问题
1:一般情况下this最终指向调用它的那个对象. 2:全局作用域或者普通函数中的this都会指向window. 例1:console.log(this); // 在控制台输出的是BOM顶级对象 wi ...
- 多Y轴图的尝试
最近的一篇文章中需要绘制多Y轴图形,Excel只能做双Y轴图,又尝试了Origin,SigmaPlot,Igor等软件,手动做起来相当繁琐,批量做更是觉得费劲,干脆尝试在MeteoInfoLab里实现 ...
- day60 Pyhton 框架Django 03
day61 内容回顾 1.安装 1. 命令行: pip install django==1.11.18 pip install django==1.11.18 -i 源 2. pycharm sett ...
- zookeeper的管理功能
一,查看当前zookeeper的版本 [liuhongdi@localhost ~]$ echo stat|nc 127.0.0.1 2181 Zookeeper version: 3.5.6-c11 ...
- cmd/powershell常用命令 git常用命令
cmd/powershell: 1. 新建文件夹: mkdir directoryName 2. 新建文件: cmd: type nul>fileName (空文件) powershell: n ...
- docker 启动mysql 挂载宿主机目录
在使用docker run 运行镜像获取容器时,有些容器会自动产生一些数据,为了这些数据会因为container (容器)的消失而消失,保证数据的安全,比如mysql 容器在运行中产生的一些表的数据, ...
- IOS8 对flex兼容性问题
问题: IOS8.2 dispaly:flex:不生效: 注意一下兼容写法的顺序问题, display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Saf ...
- FFmpeg 将大量图片合成为视频 video
1.基本格式终端输入: ffmpeg -f image2 -i /home/ttwang/images/image%d.jpg tt.mp4其中/home/ttwang/images/images%d ...