我使用的书签以这种方式抓取当前页面的src:
...
pre.appendChild(doc.createTextNode(document.documentElement.innerHTML));
...
当查找document.documentElement.innerHTML
时,会发生这种情况,这会将浏览器产生的任何内容转储为字符串。
这与实际原始来源不同,因为该页面可能已被javascript修改,例如。
是否可以让书签使用XHR再次检索页面?
我的目标是创建一个书签,将新页面的副本转换为js字符串,我可以将其发送到beautify.js
进行清理(它提供了很好的工具来清理HTML,CSS和JS),然后我用一个美化的源字符串填充<pre>
,然后我将使用prettify.js
。由于可以从我的书签中直接链接到这些相应项目的js
文件,因此这基本上是所有视图源书签的王者。
到目前为止,我一直在使用谷歌浏览器和Opera等浏览器中内置的非常出色的工具,但是由于我使用了新的iPad,我真的很喜欢在其上阅读代码,所以我试图将我的工作流程移到那里。
答案 0 :(得分:1)
以下是使用XHR的示例:
var factories=[
function(){return new ActiveXObject("Microsoft.XMLHTTP")}, // for old IE
function(){return new XMLHttpRequest()}
];
function XHRMaker(){
var xhr=false,
i=factories.length;
while (0<=--i) {
try {
xhr=factories[i]();
break;
}catch (e){}
}
return xhr;
}
function getSource(cb){
var xhr=XHRMaker();
if (false===xhr) return false;
xhr.open('GET',window.location.href,true);
xhr.onreadystatechange=function(){
if (4!==xhr.readyState) return;
delete xhr.onreadystatechange;
cb(xhr.responseText);
};
xhr.send(null);
}
getSource(function(html){
alert(html);
});
使用闭包编译器,它编译为:
var c=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}];function d(){for(var b=!1,a=c.length;0<=--a;)try{b=c[a]();break}catch(e){}return b}(function(b){var a=d();if(!1===a)return!1;a.open("GET",window.location.href,!0);a.onreadystatechange=function(){4===a.readyState&&(delete a.onreadystatechange,b(a.responseText))};a.send(null)})(function(b){alert(b)});
或书签代码:
javascript:(function(){var%20c=[function(){return%20new%20ActiveXObject("Microsoft.XMLHTTP")},function(){return%20new%20XMLHttpRequest}];function%20d(){for(var%20b=!1,a=c.length;0<=--a;)try{b=c[a]();break}catch(e){}return%20b}(function(b){var%20a=d();if(!1===a)return!1;a.open("GET",window.location.href,!0);a.onreadystatechange=function(){4===a.readyState&&(delete%20a.onreadystatechange,b(a.responseText))};a.send(null)})(function(b){alert(b)});}());void(0);