Javascript 可以从bookmarklet进行ajax调用吗?
我计划创建一个bookmarklet,用户可以使用它在mysite.com网站上共享内容(当然是url和页面标题)。因此,这就是我到目前为止所关注的:Javascript 可以从bookmarklet进行ajax调用吗?,javascript,ajax,bookmarklet,Javascript,Ajax,Bookmarklet,我计划创建一个bookmarklet,用户可以使用它在mysite.com网站上共享内容(当然是url和页面标题)。因此,这就是我到目前为止所关注的: Bookmarklet调用一个external.js,它基本上包含所有逻辑 external.js可以a)创建iframe或b)打开弹出窗口并传递共享url信息 现在我的问题是。。。还有第三种可能的方法,外部js文件可以通过ajax从mysite.com加载所有内容。或者,由于bookmarklet将共享来自其他站点的内容,由于同源策略,这将不起
使用弹出窗口与使用iframe方法相比,是否有偏好或缺点?您的bookmarklet将在当前页面的上下文中运行,而不是在您的站点中运行。因此,对站点的XHR调用将失败 通常,iframe比弹出窗口工作得更好,因为有弹出窗口拦截器 你还可以采取其他一些聪明的方法。考虑一个模型。或者,如果只需要单向通信(即,向网站发送一些数据),并且不关心响应,请考虑将获取请求URL加载为图像的源。如果你想得到真正的幻想,你甚至可以把成功或失败的形象倒流出来
<img src="http://me.com/AddLink?UserId=123&url=http://you.com&title=Your+Site" />
看看Instapaper.com书签使用的方法:
javascript:function iprl5(){
var d=document,
z=d.createElement('scr'+'ipt'),
b=d.body,
l=d.location;
try{
if(!b)throw(0);
d.title='(Saving...)'+d.title;
z.setAttribute('src',l.protocol+'//www.instapaper.com/j/xxxxxxxx?u='+encodeURIComponent(l.href)+'&t='+(new Date().getTime()));
b.appendChild(z);
} catch(e) {
alert('Please wait until the page has loaded.');
}
}
iprl5();
void(0)
实际上,他们使用JSONP并在页面上插入脚本标记。Instapaper.com是一个很好的示例,尝试使用它并通过Firebug监控网络流量,您将看到它是如何工作的。=)