【问题标题】:View Source bookmarklet: Retrieve original source?查看源小书签:检索原始源?
【发布时间】:2012-04-15 15:44:36
【问题描述】:

我使用的小书签是这样抓取当前页面的src的:

...
pre.appendChild(doc.createTextNode(document.documentElement.innerHTML));
...

当查找document.documentElement.innerHTML 时,这会转储浏览器生成的字符串作为字符串。

这与实际的原始来源不同,例如,该页面可能已被 javascript 修改。

是否可以让小书签再次使用 XHR 或其他方式检索页面?

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

迄今为止,我一直在使用 Google Chrome 和 Opera 等浏览器中内置的非常出色的工具,但自从有了新的 iPad,我真的很喜欢阅读上面的代码,所以我正试图将我的工作流程转移到那里。

【问题讨论】:

  • 听起来很有趣,你有我可以看看的存储库或要点吗?
  • 还没有,一旦我有一些很棒的工作,我可能会在 github 上设置一些东西。
  • @VictorBjelkholm 你可以在这里看到我今天早些时候的工作stackoverflow.com/questions/9966382/…

标签: javascript html bookmarks


【解决方案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);

【讨论】:

  • 谢谢。我认为我可以使用document.URL 而不是window.location.href
  • ...我今天学到的一件事是永远不要在书签中使用// 评论...我很惊讶我所有未转义的字符也都经过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多