通过书签发布到Wayback机中

问题描述 投票:6回答:2

我正在尝试使用“保存页面功能”制作一个书签,允许用户单击一次将页面推送到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

因此,在这一点上,我愿意接受想法。是否有一个很好的跨浏览器书签解决方案?我是否忽略了一些简单的尝试重新发明轮子的事情?

当我尝试粘贴URI时,我正在使用Chrome 30。

javascript bookmarklet
2个回答
4
投票

如果您尝试跨域使用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
投票

这似乎可以解决问题:

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

Source

© www.soinside.com 2019 - 2024. All rights reserved.