通过Bookmarklet发布到Wayback机器

Jas*_*ols 6 javascript bookmarklet cors

我正在尝试使用"保存页面功能"来创建一个书签,允许用户通过单击将页面推送到Internet存档.

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

http://web.archive.org/save/fullURI
Run Code Online (Sandbox Code Playgroud)

它将保存页面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>')})();
Run Code Online (Sandbox Code Playgroud)

小提琴这里.

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

有趣的是,我还发现,如果我打开一个新窗口,并粘贴URI,它可以工作,但如果我这样做window.open(URI),请说试试POST.

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

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

DG.*_*DG. 4

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

然而,我认为你感到困惑,并出于错误的原因走上了错误的道路。这很好用。

window.open("http://web.archive.org/save/" + document.location.href);
Run Code Online (Sandbox Code Playgroud)

正如这个

window.open("http://web.archive.org/save/" + encodeURI(document.location.href));
Run Code Online (Sandbox Code Playgroud)

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

window.open("http://web.archive.org/save/" + encodeURIComponent(document.location.href));
Run Code Online (Sandbox Code Playgroud)