如果有人知道为什么window.open()
在Meteor.call()
. window.open(url)
您可以通过在客户端上调用a 的回调来轻松重现这一点Meteor.call('method',argument,callback(e,r){...})
。在回调之外它工作,在回调内部,window.location = url
正确重定向。
我的数据库中有一些来自 filepicker.io 的安全 URL。由于提前生成所有策略和签名效率低下,因此我想在有人实际尝试检索这些文件时在 click 事件中生成它们。不幸的是,在 的客户端回调中Meteor.call('methodname',param,callback(e,r){...})
,window.open(url)
似乎不起作用,我不知道为什么。
模板
<template name="upload">
<div class="btn-group btn-group-vertical">
{{#each files}}
<button id="fp" class="btn btn-primary">{{filename}}</button>
{{/each}}
</div>
</template>
客户端/client.js
Template.upload.files=function(){
return files.find({});
}
Template.upload.events({
'click #fp':function(){
// window.open(this.url)
// if I uncomment the above line, a new window
// opens with the unsigned url
// (this.url is a valid mongo cursor)
Meteor.call('signedUrl',this.url,function(err,result){ // result is signed url
console.log(result); // loggs the correct url in the console
// window.location = result;
// if uncommented, the line above redirects correctly
window.open(result); // does NOT open the new window with the signed url
});
}
});
服务器/server.js
Meteor.methods({
signedUrl: function(url) {
// some proven-to-work-code that you can find at
// http://stackoverflow.com/questions/18546676
console.log(signed_url); // loggs the correctly signed url on the server
return signed_url;
}
});
提前感谢您的任何提示!此致