2012-12-06 60 views
1

當我嘗試使用IBM Social Business ToolKit for IBM Connections構建OpenSocial小工具時,我遇到Access-Control-Allow-Origin錯誤。在IBM Social Business ToolKit中禁用代理

我有3臺服務器參加這個小工具:

  • 連接:的IBM Connections 4.0服務器將被託管的小工具
  • IBMSBT:託管社交商務工具包腳本和應用
  • 服務器JESSE_API:我的應用程序服務器託管該小工具將使用

小工具XML從JESSE_API由CONNECTIONS加載的API。小工具的視圖加載腳本並調用JESSE_API。我想使用Social Business Toolkit來訪問Connections的部分內容,因此小工具視圖也會從IBMSBT中加載這些組件。

我目前只是原型 - 這是我能夠使這個工作只使用連接4.0 API,但寧願使用SBT庫。

入門我只是下跌中的「獲取我的社區 - 主窗口」代碼插入我的小工具的觀點,幷包括以下腳本:

<script type="text/javascript"> 
    var djConfig = { 
     parseOnLoad: true 
    }; 
</script> 

<script src="//IBMSBT/sbt.dojo180/dojo/dojo.js"></script> 
<script src="//IBMSBT/sbt.sample.web/library?ver=1.8.0"></script> 

重新加載小工具給在控制檯以下錯誤:

XMLHttpRequest cannot load http://IBMSBT/sbt.sample.web/service/proxy/connections/http/CONNECTIONS/communities/service/atom/communities/my?ps=5 

由於我的小工具在CONNECTIONS服務器上運行,因此我不需要代理。我沒有看到立即的方式禁用代理此端點所以我只是設置一個斷點在Endpoint.js線160之前在那裏執行以下代碼:

if(this.proxy) { 
    args.url = this.proxy.rewriteUrl(args.url,this.proxyPath); 
} 

當的斷點,我設置。 proxy = null,導致代理不被使用並且社區信息正確返回。

我的問題是我應該這樣做不同,或者應該添加一種方法來繞過使用代理給定我目前使用的結構?

回答

1

馬克華萊士,我更接近/library/端點在做什麼。

我不能讓它相當與代碼完全工作,但下面的作品起到了很好:

<script data-dojo-config="parseOnLoad:true" 
     src="//IBMSBT/sbt.dojo180/dojo/dojo.js.uncompressed.js"></script> 

<script> 
if(typeof _sbt=='undefined' || window._sbt_bridge_compat){ 
    _sbt=0; 
    dojo.registerModulePath('sbt','http://IBMSBT/sbt/js/sdk/sbt'); 
    dojo.registerModulePath('sbt/_bridge','http://IBMSBT/sbt/js/sdk/_bridges/dojo-amd'); 
    dojo.registerModulePath('sbt/dojo','http://IBMSBT/sbt/js/sdk/dojo'); 
    define('sbt/config',['sbt/Proxy','sbt/_bridge/Transport','sbt/authenticator/Basic','sbt/Endpoint'],function(Proxy,Transport,Basic,Endpoint){ 
     window.sbt = {}; 
     sbt.Properties={ 
      "sbtUrl":"http:\/\/IBMSBT\/sbt\/js\/sdk" 
     }; 
     sbt.Endpoints={ 
      'connections':new Endpoint({ 
       "baseUrl":"http:\/\/connectionsww.demos.ibm.com", 
       "transport":new Transport({}), 
       "authType":"basic", 
       "authenticator":new Basic({}), 
       "proxyPath":"connections"}) 
     }; 
     return sbt; 
    }); 
} 
</script> 

腳本標記的內容基本上是從/library/端點的輸出。 sbt.Endpoints.connections定義最初包含我刪除的定義的代理屬性。

1

SDK代理不需要在此環境中使用。作爲支持OAuth的工作的一部分,我們最近在這方面做了一些改變。你需要做的是配置SDK庫初始化,以便它知道它正在Gadget上下文中運行。

看看在acme.social.sample.webapp:

  1. faces-config.xml中,你會看到一個使用環境與OpenSocial的

     
    <!-- OpenSocial Environment --> 
    <managed-bean> 
        <managed-bean-name>openSocial</managed-bean-name> 
        <managed-bean-class>com.ibm.sbt.jslibrary.SBTEnvironment</managed-bean-class> 
        <managed-bean-scope>application</managed-bean-scope> 
        <managed-property> 
         <property-name>endpoints</property-name> 
         <value>acmeAirOS:acmeAir</value> 
        </managed-property> 
    </managed-bean> 
    
  2. 端點定義使用了一個小工具端點(在faces-config中進一步向下)。XML)

     
    <managed-bean> 
        <managed-bean-name>acmeAirOS</managed-bean-name> 
        <managed-bean-class>com.ibm.sbt.services.endpoints.GadgetOAuthEndpoint</managed-bean-class> 
        <managed-bean-scope>session</managed-bean-scope> 
        <managed-property> 
         <property-name>url</property-name> 
         <value>%{acme.url}</value> 
        </managed-property> 
    </managed-bean> 
    
  3. 在小工具XML(或導入HTML)加載當庫傳遞一個參數,以指示OpenSocial的環境應該基於從信息被用於

     
    <script type="text/javascript" src="../../library?ver=1.8.0&context=gadget&env=openSocial"></script> 
    
+0

謝謝,馬克。我接受了這個,並且更加關注了'/ library /'在做什麼,並且提出了一個我發佈的答案,作爲另一個答案。讓我知道你的想法 - 我想只是放入'/ library /'生成的代碼並不理想,但它目前運行良好。 –

相關問題