페이스 북처럼 URL이 입력되면 하단부에 이미지와 해당 페이지의 제목을 가져오도록 만들어봤습니다…
실력이 형편없어서.. 엉성합니다.
완벽한 제품도 아니고요…
Textarea에 입력되는 키 값으로 처리해서.. 오류가 있습니다만… 그냥 이런식으로 한다라고 참고만 해 주십시오.
plugin 부분의 스크립트입니다.
(function($) { $.fn.GetPageInfo = function(settings) { var config = {"widht": "100", "height": "200"}; var UrlData = null; var Timer = null; if(settings) $.extend(config, settings); this.each(function(){ jQuery.support.cors = true; if(this.tagName && this.tagName.toLowerCase() == "textarea"){ var data = null; $(this).keyup(function(e){ data = this.value; if(data.indexOf("http://") >= 0 && ValidURL(data)){ if($("div#divLinker").length <= 0){ $(this).after("<div id='divLinker'><img id='imgLoading' src='http://jimpunk.net/Loading/wp-content/uploads/loading22.gif' alt='loading' /> <table id='tbContents' border='0' cellspacing='0' cellpadding='0' style='width:100%; display:none;'><tr> <td width='120px'><img src='' border='0px' alt='' /></td> <td> <span class='' id='spanTitle'></span><br /> <span class='' id='spanBody'></span></td> </tr> </table></div>"); } else{ $("div#divLinker").css("display", ""); } var url = null; if(data.indexOf("http://") == 0){ switch(data.substr(data.length)){ case " ": url = data.substr(0); break; case "\r": url = data.substr(0); break; default: url = data; break; } } else{ url = data.substring(data.indexOf("http"), data.length); } if(UrlData != url){ clearTimeout(Timer); UrlData = url; Timer = setTimeout(function(){ fnAjaxCall(); }, 1000); } } }); } }); function ValidURL(str) { var pattern = /(http|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/ if(!pattern.test(str)) { return false; } else { return true; } } function fnAjaxCall(){ var loading = $("div#divLinker img#imgLoading"); var contentArea = $("div#divLinker table"); loading.css("display", ""); contentArea.css("display", "none"); $.ajax({ url: UrlData , async: false , contentType: "text/html; charset=UTF-8" , context: document.body , dataType: "html" , success: function(data, textStatus, jqXHR){ $("div#divLinker img#imgLoading").css("display", "none"); debugger; var linker = $(data); contentArea.css("display", ""); var imgFirst = linker.find("img:first"); if(imgFirst.width() > imgFirst.height()) contentArea.find("img").width("100px"); else contentArea.find("img").height("100px"); if(imgFirst.length > 0){ contentArea.find("img").css("display", ""); contentArea.find("img").attr("src",imgFirst.attr("src")); } else contentArea.find("img").css("display", "none"); contentArea.find("span#spanBody").text(data.match("<title>(.*?)</title>")[1]); contentArea.find("span#spanBody").text(linker.find("meta[name=description]").attr("content")); } , error: function(XMLHttpRequest, textStatus, errorThrown){ $("div#divLinker").css("display", "none"); alert(errorThrown); } }); } return this; } })(jQuery);
Html 파일입니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> new document </title> <meta name="generator" content="editplus"> <meta name="author" content="angeleyes"> <meta name="keywords" content="angeleyes,testhtml,testjavascript"> <meta name="description" content="test document"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=8" /> <style type="text/css"> </style> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> <script type="text/javascript" src="pageinfoplugin.js"></script> <!--script type="text/javascript" src="http://dev.sencha.com/deploy/dev/docs/resources/ext-base.js"></script> <script type="text/javascript" src="http://dev.sencha.com/deploy/dev/docs/resources/ext-all.js"></script--> <script language="javascript" type="text/javascript"> //<![cdata[ $(document).ready(function() { $("#txtData").GetPageInfo(); }); function fnFunction(){ try { } catch(e) { alert("test ==> " + e.message); } } //]]> </script> </head> <body> <input type="text" id="txtText" value="" /> <textarea id="txtData" rows="3" cols=""></textarea> <input type="button" id="btnButton" value="button" onclick="fnFunction();" /> </body> </html>
적용화면은 아래와 같습니다.
추후 Plugin 부분에서 텍스트 박스의 URL 체크 부분은 업데이트 하도록 하겠습니다.
그리고 아래 부분은 현재까지의 오류 현황입니다.
URL 다음에 작성된 텍스트가 있는 경우 URL 제대로 인식 못함- 이미지 교체 불가
loading 이미지 불완전- 본문의 text를 가져오지 못함..
메타 태그의 description도 못 가져옴- https 구분 불가
- 등 등 등 등….
오류 투성이입니다. *_*
PS. 혹시 괜찮은 스크립트 작성 툴 알고 계시면 추천 부탁 드립니다.
감사합니다.
'Script > JavaScript' 카테고리의 다른 글
자바스크립트 텍스트 박스 마지막 글자에 커서 위치하는 코드 (0) | 2013.01.25 |
---|---|
jquery plugin 페이스북 스타일 링크 도우미 (0) | 2012.07.26 |
순수 javascript cross-browser ajax 구현 (Xmlhttprequest) (0) | 2012.07.26 |
Javascript, JQuery Xml Parsing (File, String) [Convert string to xml] (0) | 2011.02.28 |
Javascript, JQuery preventDefault의 이해 (0) | 2011.02.23 |