通过Bookmarklet发布到Wayback机器

时间:2013-11-04 22:01:53

标签: javascript cors bookmarklet

我正在尝试使用“保存页面功能”来创建一个书签,允许用户只需单击一下即可将页面推送到Internet存档。

从我收集到的内容,如果我发布到

http://web.archive.org/save/fullURI

它会将页面保存在fullURI(即所有斜杠的fullURI=http://www.google.com

所以我编写了以下书签(为了清晰起见添加了空格,并删除了javascript:以强制语法突出显示)

(function(){
    var u='http:\/\/web.archive.org\/save\/'+encodeURI(window.location.href); 
    var w = window.open('', ''); 
    w.document.write('<script> 
        var u = \'' + u +'\'; 
        var x = new XMLHttpRequest(); 
        x.open(\'POST\',u,true); 
        x.send();
    <\/script>')})();

小提琴here

所以一切都在游泳,打开一个新的页面,尝试一个帖子,并且繁荣,CORS错误(奇怪地来自父页面,而不是新窗口)。

有趣的是,我还发现,如果我打开一个新窗口,然后粘贴URI,它就会起作用,但如果我执行了window.open(URI),则说请尝试POST

所以在这一点上我对创意持开放态度。有一个很好的,跨浏览器的书签解决方案吗?我是否忽视了一些简单的尝试重新发明轮子的事情?

FWIW当我尝试粘贴URI时,我在Chrome 30上。

2 个答案:

答案 0 :(得分:3)

如果您尝试跨域使用XMLHttpRequest,您肯定会遇到CORS问题,这正是您在新窗口中所做的事情,因为它与web.archive.org不是同一个域。您编写的代码最接近的解决方案是使用method=post将HTML表单写入新窗口并提交,而不是使用XMLHttpRequest。

然而,我认为,你感到困惑并因错误的原因开始走错路。这很好。

window.open("http://web.archive.org/save/" + document.location.href);

就像这样

window.open("http://web.archive.org/save/" + encodeURI(document.location.href));

但是,有点令人惊讶的是,这不是

window.open("http://web.archive.org/save/" + encodeURIComponent(document.location.href));

答案 1 :(得分:0)

这似乎可以解决问题:

javascript:location.href='http://web.archive.org/save/'+location.href

Source