Javascript 可以从bookmarklet进行ajax调用吗?

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将共享来自其他站点的内容,由于同源策略,这将不起

我计划创建一个bookmarklet,用户可以使用它在mysite.com网站上共享内容(当然是url和页面标题)。因此,这就是我到目前为止所关注的:

  • Bookmarklet调用一个external.js,它基本上包含所有逻辑
  • external.js可以a)创建iframe或b)打开弹出窗口并传递共享url信息
  • 现在我的问题是。。。还有第三种可能的方法,外部js文件可以通过ajax从mysite.com加载所有内容。或者,由于bookmarklet将共享来自其他站点的内容,由于同源策略,这将不起作用。唯一可行的方法是在iframe或弹出窗口中进行ajax调用


    使用弹出窗口与使用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监控网络流量,您将看到它是如何工作的。=)