126 lines
4.2 KiB
JavaScript
126 lines
4.2 KiB
JavaScript
var mediaPlatform = {};
|
||
|
||
mediaPlatform.getMPHeight = function() {
|
||
var height = document.getElementById('js_article').scrollHeight;
|
||
return height;
|
||
};
|
||
|
||
mediaPlatform.getMPInfo = function() {
|
||
var title;
|
||
if (msg_title) {
|
||
title = msg_title;
|
||
}
|
||
else {
|
||
title = document.getElementsByTagName('h1')[0].innerHTML.toString();
|
||
}
|
||
var thumbUrl;
|
||
if (msg_cdn_url) {
|
||
thumbUrl = msg_cdn_url;
|
||
}
|
||
else {
|
||
thumbUrl = document.getElementsByTagName('img')[0].src.toString();
|
||
}
|
||
var account;
|
||
if (nickname) {
|
||
account = nickname;
|
||
}
|
||
if (!title) {title = "";}
|
||
if (!thumbUrl) {thumbUrl= "";}
|
||
if (!account) {account = "";}
|
||
|
||
var info = {
|
||
"title": title,
|
||
"thumbUrl": thumbUrl,
|
||
"account": account,
|
||
}
|
||
return info;
|
||
};
|
||
|
||
mediaPlatform.getMPInfoStr = function() {
|
||
return JSON.stringify(mediaPlatform.getMPInfo());
|
||
};
|
||
|
||
// 这里的做法是为了非独立图片(下方有内容)可以保持跟内容12px的距离
|
||
mediaPlatform.handleImageBlank = function() {
|
||
var imgs = document.getElementsByTagName('img');
|
||
for (var i = 0; i < imgs.length; i++) {
|
||
var nextNode = imgs[i].nextSibling;
|
||
var preNode = imgs[i].previousSibling;
|
||
|
||
// 只处理上方有空行的情况,下方有空行经常会跟图片的说明文字连用,尝试修改会导致样式错乱
|
||
if (preNode && preNode.nodeName.toLowerCase() == 'br') {
|
||
// 处理图片上面有个br,但是br不能自定义高度,所以直接去掉重新加margin
|
||
if (preNode.style) {
|
||
preNode.style.display = "none";
|
||
}
|
||
imgs[i].style.marginTop = '12px';
|
||
} else if (preNode && preNode.nodeType == 3 && !this.emptyTextNode(preNode)) {
|
||
// 处理图片跟上面文字在同一个p里面,但是没有br隔开
|
||
imgs[i].style.marginTop = '12px';
|
||
}
|
||
}
|
||
};
|
||
|
||
mediaPlatform.emptyTextNode = function(el) {
|
||
return !el.data || /^(\s|\t)+$/g.test(el.data)
|
||
}
|
||
|
||
// 干掉p>br的情况的margin-top
|
||
mediaPlatform.updateBlankHeight = function() {
|
||
var blanks = document.getElementsByTagName('br');
|
||
for (var i = blanks.length - 1; i >= 0; i--) {
|
||
var parentNode = blanks[i].parentNode;
|
||
if (parentNode.nodeName.toLowerCase() == "p" && parentNode.childNodes.length == 1) {
|
||
parentNode.style.height = '20px';
|
||
parentNode.style.minHeight = '0em';
|
||
}
|
||
}
|
||
};
|
||
|
||
// 观察到部分公众号文章首评的懒加载图片无法正常显示,这是由于 scroll 事件没有触发导致的(怀疑是在 rangy-classapplier 引入后产生了混合反应,但在 Android 上确是好的)。这里的解决办法是手动触发一次 scroll 事件,但由于我们的 webview 其实是完整高度的,本身并不能滚动,所以这样做也不会产生抖动或者其他副作用。
|
||
mediaPlatform.protectLazyLoad = function() {
|
||
window.scrollTo(0, 1);
|
||
};
|
||
|
||
mediaPlatform.init = function() {
|
||
mediaPlatform.updateBlankHeight();
|
||
mediaPlatform.handleImageBlank();
|
||
mediaPlatform.protectLazyLoad();
|
||
};
|
||
|
||
mediaPlatform.getAuthor = function() {
|
||
var find = false;
|
||
var author = document.getElementById('js_name');
|
||
if (author != null) {
|
||
console.log('mediaPlatform.getAuthor ' + author.innerText)
|
||
author.addEventListener('click',function(){
|
||
wereadBridge.handleWithRichEditor("onClickAuthor",{"param" : author.innerText, "cmd": "onClickAuthor"}, "", "");
|
||
}, false)
|
||
}
|
||
}
|
||
|
||
mediaPlatform.init();
|
||
|
||
// 用于在退出公众号文章的时候暂停视频播放
|
||
// 由于腾讯视频是通过 iFrame 内嵌的,没有办法直接操作,我们用刷新 iFrame 的方式实现停止播放的效果
|
||
function pauseMedia() {
|
||
pauseCurrentAudio();
|
||
pauseCurrentVideo();
|
||
}
|
||
|
||
function pauseCurrentAudio() {
|
||
var audios = document.querySelectorAll('audio');
|
||
for (var i = 0; i < audios.length; i++) {
|
||
var audio = audios[i];
|
||
audio.pause();
|
||
}
|
||
}
|
||
|
||
function pauseCurrentVideo() {
|
||
var iframes = document.querySelectorAll('iframe');
|
||
for (var i = 0; i < iframes.length; i++) {
|
||
var oldFrame = iframes[i];
|
||
oldFrame.src = oldFrame.src;
|
||
}
|
||
}
|