Epub阅读器0.0.1
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user