aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormitsugu oyama2010-10-23 17:57:44 +0900
committermitsugu oyama2010-10-23 17:57:44 +0900
commit03139870c25fe5b4a797679de9dcc80370c7d82b (patch)
treecb84f255cb2d1d1d33c09a352db07d14b955d5d5
parent5501d0e0108ce7e688a5cbd0429cf0df87c1374a (diff)
downloadvimperator-plugins-03139870c25fe5b4a797679de9dcc80370c7d82b.tar.bz2
Minefield 4.0b8pre にて TINAMIのコンテンツを DOM で扱うように変更
2010/10/23(+900) の Minefield 4.0b8pre にて 例外発生の原因となっていた TINAMI の非正規化 HTML であっても range.createContextualFragment(str) が例外を throw しなく なったので、Minefield 4.0b8pre では HTML コンテンツを DOM で扱うようにした。
-rw-r--r--tinami.js46
1 files changed, 41 insertions, 5 deletions
diff --git a/tinami.js b/tinami.js
index 2e4738a..f0dbd68 100644
--- a/tinami.js
+++ b/tinami.js
@@ -100,11 +100,47 @@ commands.addUserCommand(
xhrImg.send(null);
};
+ let getDOMHtmlDocument=function(str){
+ let doc;
+ let range;
+ try{
+ if(document.implementation.createHTMLDocument){
+ doc=document.implementation.createHTMLDocument('');
+ range=doc.createRange();
+ range.selectNodeContents(doc.documentElement);
+ range.deleteContents();
+ doc.documentElement.appendChild(range.createContextualFragment(str));
+ }else{
+ doc=document.implementation.createDocument(null,'html',null);
+ range=document.createRange();
+ range.selectNodeContents(document.documentElement);
+ let content=doc.adoptNode(range.createContextualFragment(str));
+ doc.documentElement.appendChild(content);
+ }
+ }catch(e){
+ doc=null;
+ }
+ return doc;
+ };
+
+ let getImageUrl=function(pageContents){
+ let url;
+ let htmldoc=getDOMHtmlDocument(pageContents);
+ if(htmldoc){
+ if(0<htmldoc.getElementsByTagName('img').length)
+ url=htmldoc.getElementsByTagName('img').item(0).getAttribute('src');
+ else
+ url='';
+ }else{
+ let s=pageContents.indexOf('src="')+5;
+ let e=pageContents.indexOf('"',s);
+ url=pageContents.substr(s,e-s);
+ }
+ return url;
+ };
+
let trueImgInfo=function(){
- let con=xhrImgInfo.responseText;
- let s=con.indexOf('src="')+5;
- let e=con.indexOf('"',s);
- imgUrl=con.substr(s,e-s);
+ imgUrl=getImageUrl(xhrImgInfo.responseText);
if(-1!=imgUrl.search(/http:\/\/img.tinami.com\/illust\/img\//i)){
saveImag();
}else{
@@ -133,4 +169,4 @@ commands.addUserCommand(
saveImag();
}
}
-); \ No newline at end of file
+);