【发布时间】:2016-07-12 18:05:48
【问题描述】:
我正在测试一些代码,通过捕获用户点击的链接从 chrome 扩展中抓取 PDF。同步 xmlhttprequest 适用于指向 html 文档和 pdf 的链接。但是,异步似乎永远不会返回。我是不是做错了什么?
这是我的 content.js 在失败的异步版本中的最小演示示例:
var links = document.getElementsByTagName("a");
function getlink(link) {
console.log("looking for link");
var x = new XMLHttpRequest();
x.open("GET", link, true);
x.onload = function(e) {
console.log("loaded");
console.log(link);
console.log(x.status);
};
x.onerror = function (e) {
console.error(x.statusText);
};
x.send(null);
}
for (i = 0, len = links.length; i < len; i++) {
var l = links[i]
l.addEventListener("click", function() {
console.log(this.href);
getlink(this.href);
}, false);
};
使用该代码,当单击指向 html 文档的链接时,它会按预期记录“寻找链接”、“已加载”、url 和“200”。这也是当我重写此代码以仅同步获取时它记录的内容(通过将open 方法的最后一个参数切换为true,并将所有日志记录代码从unload 移到调用函数。
但是当我异步获取 pdf 时,它只是说“正在寻找链接”然后静音---没有错误,没有响应。它确实给了我一个信息:
资源解释为文档,但使用 MIME 类型 application/pdf 传输:“[URL TO PDF]”。
但我不确定这是来自 javascript 链接捕获,还是普通的浏览器点击操作。
有人对此有任何见解吗?不幸的是,我认为我必须异步执行此操作...
【问题讨论】:
标签: javascript ajax http asynchronous google-chrome-extension