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