On 12 Jul 2012, at 14:54, Michael Hertel wrote:

> 2012/7/12 Scott Wilson <[email protected]>
> 
>> On 12 Jul 2012, at 13:40, Michael Hertel wrote:
>> 
>>> My first solution used innerHTML, but that wasn´t nice in my opinion. So
>> i
>>> tried it with window.location.href. I think I should go back to the first
>>> solution or use an iframe.
>>> But the problem with the javascript API also occurs if I localise the
>>> index.html (default start file). If this file (for example:
>>> locales/en/index.html) contains some javascript, such as
>>> "widget.proxify(url)", the user agent can´t access the widget object.
>> 
>> I just tried to replicate this with a widget containing the following:
>> 
>> /locales/en/index.html
>> config.xml
>> 
>> and in locales/en/index.html I put "alert(window.widget)"
>> 
>> When I view it in the demo page, I get "Object object"; inspecting with
>> Jash I can also access "widget.proxify" so this seems as expected.
>> 
>> So I wonder if there is another problem here?
>> 
>> 
> My widget package contains the following files:
> /locales/de/index.html
> index.html
> config.xml
> Both "index.html" files have the same content: "alert(window.widget);"
> For the unlocalised file the user agent says "object", but for the
> localised it says "undefined".

Thanks for testing that Michael  - I've replicated it myself and you are quite 
correct.

I did some investigation and discovered the source of the problem is in the 
list of default supported locales set in widgetserver.properties, which doesn't 
include "de":

## language settings
## NB "en-gb-yorks" is for testing localization
widget.locales=en, nl, fr, en-gb-yorks
widget.default.locale=en

This list is used to determine which start files are processed in the widget 
package; the workaround is to add your locales to widgetserver.properties, e.g.

widget.locales=en, nl, fr, de

This should then fix the problem.

However  I think there is also a good case for in future removing this list and 
processing all localised start files. In the meantime it should certainly be 
better documented - thank you for identifying this problem!

> 
>> Another problem I found occurs by using an iframe with a remote url inside
>>> the widget. In that case the user agent always denies the access to
>>> the property
>>> 'dispatchEvent' (wookie-wrapper.js, line 229), if the "
>>> widget.preferences.setItem" function is called. The iframe itself doesn´t
>>> modify anything of the widget.
>> 
>> That sounds like a cross-origin request issue that should be handled
>> better by wookie-wrapper.js; can you create a new issue in the tracker for
>> it?
>> 
>> https://issues.apache.org/jira/browse/WOOKIE
> 
> 
> Added the issue.

Thanks!

> 
> Thanks for your help.
> 
> 
>> 
>> 
>>> 
>>> 2012/7/12 Scott Wilson <[email protected]>
>>> 
>>>> On 12 Jul 2012, at 12:10, Michael Hertel wrote:
>>>> 
>>>>> Hello.
>>>>> 
>>>>> I got a problem and I don´t know, if it´s my fault or a bug of Apache
>>>>> Wookie. Is it allowed to use more than one html file for a
>> localisation?
>>>>> For example if I place a index.html and a example.html in the root of
>> the
>>>>> widget package and use the line "window.location.href='example.html';"
>>>> in a
>>>>> javascript tag inside the index.html. The problem is, if I use
>>>>> "window.location.href='example.html';" in a widget in Apache Wookie, I
>>>>> can´t access the widget javascript API from the example.html file. I
>>>> can´t
>>>>> find any information about this problem in the W3C widget
>> specification.
>>>>> 
>>>>> Thank you very much in advance for your answer.
>>>> 
>>>> Hi Michael,
>>>> 
>>>> The good news is I know what is causing this problem. The bad news is,
>> I'm
>>>> not sure whether we can - or should - fix it.
>>>> 
>>>> The W3C spec generally assumes that a Widget has a single page (usually
>>>> HTML) which is either specified in the content src="" attribute of
>>>> config.xml, or is in the "default start files list" which includes
>>>> "index.html, index.xml, index.svg" (etc). It also includes any localised
>>>> variants of these files located in "locale folders" (e.g.
>>>> "locales/de/index.html").
>>>> 
>>>> The assumption is that a Widget starts at a (localised) start page, and
>>>> then the browser does not navigate - that is, you don't change the
>>>> window.location.href.
>>>> 
>>>> So, what you are doing isn't really covered by the spec, which is the
>>>> reason why its not behaving well in Wookie as we've mostly stuck to
>>>> conforming to the spec.
>>>> 
>>>> If you look inside any HTML file served by Wookie you'll notice it has a
>>>> lot of injected JavaScript files, including the one that creates the
>>>> window.widget object. These are injected into all start files listed by
>> the
>>>> widget (see above) but not any other files in your .wgt package, such as
>>>> your "example.html".
>>>> 
>>>> So, whats the solution? Well, it depends on why you want to show this
>>>> other page, but there are alternatives to navigating to it. For example,
>>>> you could use a lightbox instead to show the content; or use AJAX to
>>>> replace content in index.html. Or open example.html in an iframe (making
>>>> sure you call "window.parent.widget" rather than just "widget".) Do any
>> of
>>>> these sounds possible? If not, tell us the use-case and maybe we can
>> think
>>>> of another solution.
>>>> 
>>>> If no workarounds are possible, you'd need to extend the widget parser
>> to
>>>> inject the widget API javascript into other HTML files that aren't start
>>>> files, which would probably need an extension to the spec.
>>>> 
>>>> Hope this helps,
>>>> 
>>>> S
>> 
>> 

Reply via email to