asana javascript bookmarklet创建新任务

asana javascript bookmarklet创建新任务,javascript,bookmarklet,asana,Javascript,Bookmarklet,Asana,我正在尝试组合一个bookmarklet,它可以获取当前页面的URL、标题以及任何选定的文本,然后通过API将其作为新任务发布到Asana 我已经为它们创建了一个特定的项目,捕获了项目id,并识别了工作区id。在命令行上使用curl测试这些值效果很好: curl --user MYAPIKEY: https://app.asana.com/api/1.0/workspaces/MYWORKSPACEID/tasks --data-urlencode 'name=Hello World' --da

我正在尝试组合一个bookmarklet,它可以获取当前页面的URL、标题以及任何选定的文本,然后通过API将其作为新任务发布到Asana

我已经为它们创建了一个特定的项目,捕获了
项目id
,并识别了
工作区id
。在命令行上使用curl测试这些值效果很好:

curl --user MYAPIKEY: https://app.asana.com/api/1.0/workspaces/MYWORKSPACEID/tasks --data-urlencode 'name=Hello World' --data-urlencode 'notes=How are you' --data-urlencode 'projects[0]=MYPROJECTID'
借用其他示例javascript书签,我将以下代码组合在一起:

javascript:
apikeyhash='MYBASE64ENCODEDAPIKEYPLUSCOLON';
workspaceid='MYWORKSPACEID';
projectid='MYPROJECTID';
title=document.title;
loc=location.href;
if(document.getSelection) { 
  text=location+'\r\r'+document.getSelection(); }
else {
  text=location;
}
xml = new XMLHttpRequest();
xml.open('POST', 'https://app.asana.com/api/1.0/workspaces/'+workspaceid+'/tasks', false);
xml.setRequestHeader("Authorization", 'Basic '+apikeyhash);
xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xml.send('name='+encodeURIComponent(title)+'&notes='+encodeURIComponent(text)+'&projects%5B0%5D='+projectid);
alert(xml.responseText);
(其中MYBASE64ENCODEDAPIKEYPLUSCOLON是echo-n'MYAPIKEY:'| openssl enc-base64的输出)

将其用作bookmarklet(通过Safari中的书签栏访问)只会导致当前页面出现刷新,并且不会向
Asana
添加任何内容。如果您能帮助我修复javascript,我将不胜感激


注意:我的理想解决方案是从Asana弹出“快速添加任务”对话框,并预先填充该表单(使用当前登录Asana用户的凭据),但我不确定这是否可行。现在,作为一项新任务,只需将URL、标题以及任何选定的文本快速发送到Asana将非常有用。由于只有少数用户,使用每个用户的API密钥创建自定义bookmarklet是可以接受的。

我怀疑如果您检查浏览器中的javascript控制台,您会发现它拒绝了跨站点请求。Asana API目前不支持(尽管我们计划在将来支持),因此通常的规则适用:您只能向与当前网站相同的主机:端口发出请求。

对于其他网站,您可能知道,但是还有一个非常好的Chrome扩展(但您必须将URL复制粘贴到任务中)。当然,使用AsanaAPI自己构建东西也很酷!:)

此外,我还构建了一个小小的Asana Macbook触摸栏按钮,用于快速创建任务,但这当然只有在您使用Mac电脑时才会出现,而且不会自动将其放入URL中,这更适用于您当前执行的任何任务:

视频:

说明: