下面的 JavaScript 代码有两个步骤。
第 1 步:转到 .pdf、.doc、.exe 或非 html 本机的文件。如果 location.href 已占据浏览器窗口,则无需执行步骤 2。(PDF 通常占据浏览器窗口)。大多数其他事情都会启动下载管理器进程。比如.exe。但有些内容(例如 Word 文档)可以下载或直接显示在浏览器窗口中,具体取决于浏览器设置。我希望它做 hef.location 让它做的事情。
第 2 步:但是,如果在该过程完成后正在下载 .exe 等文件,则转到主页。
或者在步骤 1 和步骤 2 之间等待 5 秒的解决方案似乎在大多数情况下都有效。但在较慢的连接上,它并不总是有效。然后它会在没有完成第一个 href.location 调用的情况下进入主页,并且他们永远不会看到 PDF,而只会看到主页。
仅供参考...我将它们包装在 setTimeOut 中的原因与此 Firefox 问题有关。 堆栈溢出:864633 分配到文档位置 href-无破坏历史记录
我的问题: 有没有办法知道 location.href 进程何时完成?
<script language="JavaScript"><!--
function windowOnLoad() {
setTimeout(function(){
location.href='/someurl/something.pdf'; //sometimes this is .doc file
},0);
setTimeout(function(){
location.href='/homepage';
},5000);
return false;
}
//-->
</script>
Run Code Online (Sandbox Code Playgroud) 我正在使用bit.ly url缩短服务来缩短某些网址被发送到"在twitter上分享"功能.我只想在用户实际按下共享按钮时加载bit.ly url(由于bit.ly的max 5 parallel reqs限制).Bit.ly的REST API使用缩短的url返回JSON回调,这使整个场景异步.
我已尝试以下方法来停止click事件,并等待JSON调用在启动单击之前返回一个值.
我在jQuery(document).ready()中有以下简化代码:
更新的代码(过度简化)!
jQuery("#idofaelement").click(function(event) {
event.preventDefault(); //stop the click action
var link = jQuery(this);
bitlyJSON(function(shortUrl) {
link.attr("href", function() {
//process shortUrl
//return finalized url;
}).unbind().click();
});
});
Run Code Online (Sandbox Code Playgroud)
并使用以下代码来处理缩短的缩短(工作得很好):
function bitlyJSON(func) {
//
// build apiUrl here
//
jQuery.getJSON(apiUrl, function(data) {
jQuery.each(data, function(i, entry) {
if (i == "errorCode") {
if (entry != "0") {
func(longUrl);}
} else if (i == "results") {
func(entry[longUrl].shortUrl);}
});
});
} (jQuery)
Run Code Online (Sandbox Code Playgroud)
href的值已更改,但最终的.click()事件永远不会被触发.这在为href定义静态值时工作正常,但在使用异步JSON方法时则不行.