我计划创建一个书签,用户将使用该书签在网站上分享内容(细菌网址和页面标题),例如mysite.com。所以这就是我现在所遵循的:
现在我的问题是......是否有可能的第三种方法,外部js文件可以通过mysite.com的ajax加载所有内容。或者由于bookmarklet将共享来自其他站点的内容,因此由于相同的源策略而无法工作。这可行的唯一方法是从iframe或弹出窗口中调用ajax?
使用弹出窗口与iframe方法有偏好还是缺点?
答案 0 :(得分:4)
看一下Instapaper.com bookmarklet使用的方法:
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并在页面上插入脚本标记。
答案 1 :(得分:1)
您的书签将在当前页面的上下文中运行,而不是您的站点。因此,XHR对您网站的呼叫将失败。
通常,由于弹出窗口拦截器,iframe会比弹出窗口更好。
您可以采取其他一些聪明的方法。考虑JSONP模型。或者,如果您只需要单向通信(即向您的站点发送一些数据),并且您不关心响应,请考虑加载GET请求URL作为图像源。如果你想变得非常喜欢,你甚至可以流回成功或失败的图像。
<img src="http://me.com/AddLink?UserId=123&url=http://you.com&title=Your+Site" />