Thanks, this helped alot. The problem is how you are rendering the
gadget, you are doing more work than you have to :) For this simple
sample there is no need to preload the gadget. So you can removed the
addGadgetHandler function and replace addGadget with this code.
function addGadget() {
var parent = window.location.origin;
var el = document.getElementById("gadgetContainer");
var site = container.newGadgetSite(el)
var params = {};
params[osapi.container.RenderParam.WIDTH] = '100%';
container.navigateGadget(site, gadgetUrl, {}, params);
console.log("inside add gadget handler");
}
Calling navigateGadget helps to setup the rpc functionality. I tested
this in FF and Chrome and it seems to work. Hope this helps!
On Thu, Feb 13, 2014 at 10:41 AM, Wade Girard <[email protected]> wrote:
> Okay, sorry for the delay, took me a little time to put this together
>
> Here is the container html
>
> <!DOCTYPE html>
> <html>
> <head>
> <style>
> .gadget {
> width: 500;
> height: 500;
> border: 1px solid silver;
> }
> </style>
> <script type="text/javascript"
> src="../../../gadgets/js/container:open-views:opensearch:rpc:xmlutil:pubsub
> -2.js?c=1&debug=1&container=default"></script>
> <script type="text/javascript">
> var container, gadgetUrl =
> "http://localhost/cwfo/gadgets/HelloWorld.xml";
>
> function addGadget() {
> console.log("preloading gadget:" + gadgetUrl);
> container.preloadGadget(gadgetUrl, addGadgetHandler);
> }
>
> function addGadgetHandler(resp) {
> var gSpec = resp[gadgetUrl];
> if (typeof gSpec !== 'undefined') {
> var parent = window.location.origin;
> var container =
> document.getElementById("gadgetContainer");
> iFrame = "<iframe class='gadget' src='" +
> gSpec.iframeUrls["default"]
> + "#parent=" + parent + "&rpctoken=1234" + "'>";
> container.innerHTML = iFrame;
> console.log("inside add gadget handler");
> } else {
> alert("unable to add gadget");
> }
> }
>
> function msgHandler(msg) {
> console.log(msg);
> }
>
> var urlBase = location.href.substr(0,
> location.href.indexOf('/cwfo'));
> var contextRoot =
> urlBase.substr(urlBase.indexOf(location.host) +
> location.host.length);
>
> var testConfig = {};
> testConfig[osapi.container.ServiceConfig.API_PATH] =
> contextRoot +
> '/rpc';
> testConfig[osapi.container.ContainerConfig.RENDER_DEBUG] =
> '1';
>
> testConfig[osapi.container.ContainerConfig.GET_CONTAINER_TOKEN] =
> function(callback) {
> gadgets.log('Updating container security token.');
>
> callback('john.doe:john.doe:appid:cont:url:0:default', 0);
> };
> container = new osapi.container.Container(testConfig);
> container.rpcRegister("initial_gadget_message", msgHandler);
> </script>
> </head>
> <body>
> <div>
> <button onclick="addGadget()">Click To Add</button>
> <div id="gadgetContainer"></div>
> </div>
> </body>
> </html>
>
>
> I am using version 2.5 update 1
> --
> Wade Girard | Principal Software Engineer
>
> Calabrio, Inc. | 400 1st Avenue N, Ste 300 | Minneapolis, MN 55401
> Phone: 763.795.7798
>
>
>
>
> On 2/12/14, 3:24 PM, "Ryan Baxter" <[email protected]> wrote:
>
>>Wade can you provide a sample container html file so I can try it
>>locally? What version of Shindig are you using?
>>
>>On Wed, Feb 12, 2014 at 3:50 PM, Wade Girard <[email protected]>
>>wrote:
>>> Hi Ryan,
>>> Thank you for your suggestions. I changed the gadget to this
>>> <Module>
>>> <ModulePrefs title="Hello World">
>>> <Require feature="rpc" />
>>> </ModulePrefs>
>>> <UserPref name="myName" display_name="Name" default_value="Wade" />
>>> <Content type="html">
>>> <![CDATA[
>>> <script type="text/javascript">
>>> function init() {
>>> gadgets.rpc.call(null,
>>>'initial_gadget_message', null, 'Hello there!
>>> Pre-onload message sent successfully.');
>>> }
>>> gadgets.util.registerOnLoadHandler(init);
>>> </script>
>>> <div id="widgetNode">Hello World</div>
>>> ]]>
>>> </Content>
>>> </Module>
>>>
>>>
>>> And Removed the code that did the gadgets.rpc.register and
>>> gadgets.rpc.setupReceiver and added the code to the container. Here is
>>> what it looks like (added the full config, in case I am missing
>>>something
>>> there)
>>>
>>> var testConfig = {};
>>>
>>>testConfig[osapi.container.ServiceConfig.API_PATH] =
>>> 'http://localhost/rpc';
>>>
>>>testConfig[osapi.container.ContainerConfig.RENDER_DEBUG] = '1';
>>>
>>>testConfig[osapi.container.ContainerConfig.GET_CONTAINER_TOKEN] =
>>> function(callback) {
>>> gadgets.log('Updating container
>>>security token.');
>>>
>>>callback('john.doe:john.doe:appid:cont:url:0:default', 10);
>>> };
>>> this._container = new osapi.container.Container(testConfig);
>>>
>>>this._container.rpcRegister("initial_gadget_message",
>>> _setTitleHandler));
>>>
>>>
>>>
>>> Unfortunately I am still getting the same message in the firebug console
>>> No relay set (used as window.postMessage targetOrigin), cannot send
>>> cross-domain message
>>>
>>>
>>> Thanks for all your help.
>>> --
>>> Wade Girard | Principal Software Engineer
>>>
>>> Calabrio, Inc. | 400 1st Avenue N, Ste 300 | Minneapolis, MN 55401
>>> Phone: 763.795.7798
>>>
>>>
>>>
>>>
>>> On 2/12/14, 2:31 PM, "Ryan Baxter" <[email protected]> wrote:
>>>
>>>>Hi Wade,
>>>>
>>>>A couple of comments.
>>>>
>>>>1.) In your gadget you probably want to wrap gadgets.rpc.call in a
>>>>function passed to gadgets.util.registerOnLoadHandler to make sure the
>>>>gadget is completely initialized before making that rpc call.
>>>>2.) In your container I would suggest you use the container feature.
>>>>It takes care of some of the nasty stuff with regards to registering
>>>>RPC callback functions. All you then have to do is call
>>>>container.rpcRegister('initial_gadget_message', _messageHandler)
>>>>
>>>>On Wed, Feb 12, 2014 at 2:16 PM, Wade Girard <[email protected]>
>>>>wrote:
>>>>> I am trying to implement a container running under Shindig.
>>>>>
>>>>> I am having difficulty getting the rpc (Gadget->Contianer)
>>>>>communication working.
>>>>>
>>>>> Here is my simple gadget:
>>>>>
>>>>> <Module>
>>>>>
>>>>> <ModulePrefs title="Hello World">
>>>>>
>>>>> <Require feature="rpc" />
>>>>>
>>>>> </ModulePrefs>
>>>>>
>>>>> <UserPref name="myName" display_name="Name" default_value="Wade" />
>>>>>
>>>>> <Content type="html">
>>>>>
>>>>> <![CDATA[
>>>>>
>>>>> <script type="text/javascript">
>>>>>
>>>>> gadgets.rpc.call(null, 'initial_gadget_message', null, 'Hello there!
>>>>>Pre-onload message sent successfully.');
>>>>>
>>>>> </script>
>>>>>
>>>>> <div id="widgetNode">Hello World</div>
>>>>>
>>>>> ]]>
>>>>>
>>>>> </Content>
>>>>>
>>>>> </Module>
>>>>>
>>>>> Here is what I have done on the server (adapted)
>>>>>
>>>>> var id = "gadget_" + (this._static.id++);
>>>>>
>>>>> gadgets.rpc.register("initial_gadget_message", _messageHandler));
>>>>>
>>>>> var parent = window.location.origin; // also tried
>>>>>window.location.href
>>>>>
>>>>> iFrameNode.src = obj.iFrameUrls["default"] + "#parent=" parent +
>>>>>"&rpctoken=12345";
>>>>>
>>>>> iFrameNode.id = id;
>>>>>
>>>>> gadgets.rpc.setupReceiver(id);
>>>>>
>>>>> The container is at port 80, the gadget is at port 8080, on the same
>>>>>server (localhost)
>>>>> The gadget loads in the container, but most of the time produces this
>>>>>message, sometimes, vary rarely, it will not produce the message.
>>>>>
>>>>> No relay set (used as window.postMessage targetOrigin), cannot send
>>>>>cross-domain message
>>>>>
>>>>> Any help is appreciated, thanks
>>>>> --
>>>>> Wade Girard | Principal Software Engineer
>>>>> Calabrio, Inc. | 400 1st Avenue N, Ste 300 | Minneapolis, MN 55401
>>>>> Phone: 763.795.7798
>>>
>