可以从书签中进行ajax调用吗?

时间:2011-03-08 23:00:37

标签: javascript ajax bookmarklet

我计划创建一个书签,用户将使用该书签在网站上分享内容(细菌网址和页面标题),例如mysite.com。所以这就是我现在所遵循的:

  1. Bookmarklet调用external.js,它基本上包含所有逻辑
  2. external.js可以a)创建iframe或b)打开弹出窗口并传入共享网址信息
  3. 现在我的问题是......是否有可能的第三种方法,外部js文件可以通过mysite.com的ajax加载所有内容。或者由于bookmarklet将共享来自其他站点的内容,因此由于相同的源策略而无法工作。这可行的唯一方法是从iframe或弹出窗口中调用ajax?

    使用弹出窗口与iframe方法有偏好还是缺点?

2 个答案:

答案 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" />