首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查看源代码bookmarklet:检索原始源代码?

查看源代码bookmarklet:检索原始源代码?
EN

Stack Overflow用户
提问于 2012-04-02 05:56:30
回答 1查看 1.3K关注 0票数 2

我使用的bookmarklet以这种方式获取当前页面的src:

代码语言:javascript
复制
...
pre.appendChild(doc.createTextNode(document.documentElement.innerHTML));
...

发生的情况是,在查找document.documentElement.innerHTML时,这会将浏览器生成的任何内容都转储为字符串。

这与实际的原始源不同,因为页面可能已经被javascript修改过。

有没有可能让bookmarklet再次使用XHR或类似的工具检索页面?

我的目标是有一个书签小程序,它可以将页面的新副本转换为js字符串,我可以将它发送到beautify.js进行清理(它提供了很好的工具来清理HTML、CSS和JS),然后我用得到的美化后的源字符串填充<pre>,然后我将对其使用prettify.js。因为可以从我的书签直接链接到这些项目的js文件,所以基本上这将是所有视图源书签中的王者。

到目前为止,我一直在使用谷歌浏览器和Opera等浏览器内置的非常优秀的工具,但自从我有了新的iPad,我真的很喜欢在上面阅读代码,所以我试图将我的工作流程转移到那里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-02 06:27:12

下面是一个使用XHR的示例:

代码语言:javascript
复制
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);
});

使用闭包编译器,它会编译成:

代码语言:javascript
复制
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)});

或者作为bookmarklet代码:

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9968680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档