We have open sourced a WebWorks extension for the BlackBerry Tablet OS that enables external web pages to be displayed within WebWorks applications.
In certain cases, launching the external browser to view web pages can be disruptive to the overall user experience of your app (the PlayBook’s excellent multitasking support notwithstanding).
In theory, it is possible to embed external web pages within a WebWorks app using iframes. However, in practice, the suitability of iframes in this context has diminished significantly due to the numerous counter-measures (framebusting, x-frame-options, etc.) that have been put in place to combat the security exploits targeting iframes. As a general-purpose mechanism for embedding arbitrary external web content, iframes are not a viable option.
An alternative mechanism for embedding external web pages is to spawn an isolated, independent browser instance within the WebWorks app (specifically for the purpose of displaying this content). Although WebWorks does not provide this functionality out-of-the-box, it can be made available to your WebWorks apps as a third-party extension.
Using an undocumented (and officially unsupported) mechanism[ref]One possible explanation for this stance is that WebWorks may transition off of AIR at some point in the future.[/ref], application developers can write their own extensions in Adobe AIR that expose other low-level capabilities that are outside of the surface area of the core WebWorks API.
In this case, our goal was to build an extension that enables hosting a secondary WebKit instance within the context of a single WebWorks app. (This extension enables any WebWorks app to spawn a secondary WebKit instance that is completely isolated from the main instance.)
We have open sourced this work to help other developers improve the experiences of their WebWorks apps. To that end, the source code for our ChildBrowser extension is available on GitHub under the very liberal MIT license.
Grab the source code here, integrate the extension into your app (instructions are in the linked README) and send improvements our way!