jquery - Cross-domain Javascript - Pull Meta Tags -
i'm building meteor.js app , 1 of things i'd pull title , meta description tags saved page. i'm using this cross domain program , have half of code working.
here's excerpt; takes value given in form tagged "url" , runs code:
$.get(url, function(response){ if ((suggestedtitle=((/<title>(.*?)<\/title>/m).exec(response.responsetext))) != null){ $('#title').val(suggestedtitle[1]); }else{ $('#title').val(url); } if ((suggesteddesc=($('meta[name=description]').attr('content'))) != undefined){ $('#desc').val(suggesteddesc[1]); }else{ $('#desc').val('description page cannot found.'); } }); i recognize it's not best practice use regular expressions parse html (open suggestions on alternative haven't looked carefully) aside, script pulls title url or returns web address if can't found, description fails , returns fallback text. appreciate help, :)
instead of using regex or jquery parse response, use dom methods go through response text. try this:
$.ajax({ url: "http://www.google.com", type: "get", async: true }).done(function (response) { var div = document.createelement("div"), responsetext = response.results[0], title, metas, meta, name, description, i; div.innerhtml = responsetext; title = div.getelementsbytagname("title"); title = title.length ? title[0].innerhtml : undefined; metas = div.getelementsbytagname("meta"); (i = 0; < metas.length; i++) { name = metas[i].getattribute("name"); if (name === "description") { meta = metas[i]; description = meta.getattribute("content"); break; } } console.log("title:", title); console.log("description:", description); }).fail(function (jqxhr, textstatus, errorthrown) { console.log("ajax error:", textstatus, errorthrown); }); demo: http://jsfiddle.net/kldsg/3/
i put plugin provided @ top (it's minified fit , can still see own code.
obviously, uses http://www.google.com, should able put url in , work same. also, can put reusable function - wanted show example. assume works same $.get() instead of $.ajax().
you can't directly use response.responsetext, because item returned object consisting of few things. html, can use response.results[0]. response.results array, , i'm not sure else in there (like in index 1, 2, 3, etc.).
and found weird things happening when tried using $(response.results[0]), stuck normal dom manipulation.
Comments
Post a Comment