EPUBJS.filePath = appOptions.epubStatic+"js/libs/"; EPUBJS.cssPath = appOptions.epubStatic+"css/"; //避免css中图片解析;没找到图片时导致css也不加载的问题 EPUBJS.replace.cssUrls = function(_store, base, text){ var deferred = new RSVP.defer(), matches = text.match(/url\(\'?\"?((?!data:)[^\'|^\"^\)]*)\'?\"?\)/g); if(!_store) return; if(!matches){ deferred.resolve(text); return deferred.promise; } var promises = matches.map(function(str) { var full = EPUBJS.core.resolveUrl(base, str.replace(/url\(|[|\)|\'|\"]|\?.*$/g, '')); return _store.getUrl(full).then(function(url) { text = text.replace(str, 'url("'+url+'")'); }, function(reason) { deferred.resolve(text); // add by warlee; //deferred.reject(reason); }); }); RSVP.all(promises).then(function(){ deferred.resolve(text); }); return deferred.promise; }; EPUBJS.Unarchiver.prototype.getUrl = function(url, mime){ var unarchiver = this; var deferred = new RSVP.defer(); var decodededUrl = window.decodeURIComponent(url); var entry = this.zip.file(decodededUrl); var _URL = window.URL || window.webkitURL || window.mozURL; var tempUrl; var blob; //文件丢失允许继续执行 if(!entry){ //console.log(111,entry,decodededUrl,url,this.urlCache); url = "OEBPS/images/cover.jpg"; entry = this.zip.file(url); if(url in this.urlCache) { deferred.resolve(this.urlCache[url]); return deferred.promise; } } if(!entry) { deferred.reject({ message : "File not found in the epub: " + url, stack : new Error().stack }); return deferred.promise; } if(url in this.urlCache) { deferred.resolve(this.urlCache[url]); return deferred.promise; } blob = new Blob([entry.asUint8Array()], {type : EPUBJS.core.getMimeType(entry.name)}); tempUrl = _URL.createObjectURL(blob); deferred.resolve(tempUrl); unarchiver.urlCache[url] = tempUrl; return deferred.promise; }; var htmlSafe = function(html){ var text = htmlSafeReplace(html); // if(text != html){console.error('htmlSafe:',[html,text]);} return text; var text2 = DOMPurify.sanitize(html,{ ADD_TAGS:['iframe','style','foreignObject','?xml','!DOCTYPE','link'], USE_PROFILES:{html:true,mathMl:true,svg:true,svgFilters:true}, ADD_ATTR: ['*','target'], WHOLE_DOCUMENT:true,KEEP_CONTENT:true, }); }; var htmlSafeReplace = function(html){ // html = htmlShow(html); // 文本中包含&时会异常 &=>& html = html.replace(/[\s\/]+on(\w+)[\s\/]*=/ig,' _on$1=');// onxxx;=>_onxxx html = html.replace(/data:text\/html/ig,'data:text/text');// data:text/text html = html.replace(/