You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by fe...@apache.org on 2011/07/11 13:00:31 UTC
svn commit: r1145122 -
/shindig/trunk/features/src/main/javascript/features/caja/taming.js
Author: felix8a
Date: Mon Jul 11 11:00:31 2011
New Revision: 1145122
URL: http://svn.apache.org/viewvc?rev=1145122&view=rev
Log:
Fix timing problem in Caja initialization on Opera
https://reviews.apache.org/r/796/
Modified:
shindig/trunk/features/src/main/javascript/features/caja/taming.js
Modified: shindig/trunk/features/src/main/javascript/features/caja/taming.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/caja/taming.js?rev=1145122&r1=1145121&r2=1145122&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/caja/taming.js (original)
+++ shindig/trunk/features/src/main/javascript/features/caja/taming.js Mon Jul 11 11:00:31 2011
@@ -23,10 +23,12 @@
caja___ = (function() {
// currently limited to one cajoled gadget per ifr
+ var guestFrame;
var tamingFrame;
var tame___; // tame___ === tamingFrame.contentWindow.___
- var guestFrame;
var pendingScript;
+ var guestFrameReady = false;
+ var tamingFrameReady = false;
// URI policy: Rewrites all uris in a cajoled gadget
var uriCallback = {
@@ -56,10 +58,6 @@ caja___ = (function() {
}
}
- function getPendingScript() {
- return pendingScript;
- }
-
function getTameGlobal() {
return tamingFrame.contentWindow;
}
@@ -143,38 +141,56 @@ caja___ = (function() {
}
function start(script, debug) {
- var debugArg = debug ? '?debug=1' : '';
+ // feral object marker for directConstructor
+ window.Object.FERAL_FRAME_OBJECT___ = window.Object;
+
+ pendingScript = script;
+ debug = debug ? '?debug=1' : '';
- // guestFrame must be created before loadedTamingFrame fires
guestFrame = makeFrame('caja-guest-frame');
var gdoc = guestFrame.contentWindow.document;
+ gdoc.write('<!doctype html>\n');
gdoc.write('<html><head>\n');
gdoc.write('<script>var cajaIframeDone___ = function(){};<\/script>\n');
- gdoc.write(
- '<script src="js/caja-guest-frame' + debugArg + '"><\/script>\n');
+ gdoc.write('<script src="js/caja-guest-frame' + debug + '"><\/script>\n');
+ gdoc.write('<script>\n');
+ gdoc.write(' function cajaRun(script) {\n');
+ gdoc.write(' eval(script);\n');
+ gdoc.write(' parent.gadgets.util.runOnLoadHandlers();\n');
+ gdoc.write(' }\n');
+ gdoc.write(' parent.caja___.loadedGuestFrame();\n');
+ gdoc.write('<\/script>\n');
+ gdoc.write('</head></html>');
+ gdoc.close();
tamingFrame = makeFrame('caja-taming-frame');
var tdoc = tamingFrame.contentWindow.document;
+ tdoc.write('<!doctype html>\n');
tdoc.write('<html><head>\n');
tdoc.write('<script>var cajaIframeDone___ = function(){};<\/script>\n');
- tdoc.write(
- '<script src="js/caja-taming-frame' + debugArg + '"><\/script>\n');
+ tdoc.write('<script src="js/caja-taming-frame' + debug + '"><\/script>\n');
tdoc.write('<script>parent.caja___.loadedTamingFrame();<\/script>\n');
tdoc.write('</head></html>');
tdoc.close();
-
- pendingScript = script;
-
- // feral object marker for directConstructor
- window.Object.FERAL_FRAME_OBJECT___ = window.Object;
}
function loadedTamingFrame() {
- var gdoc = guestFrame.contentWindow.document;
- gdoc.write('<script>parent.caja___.loadedGuestFrame();<\/script>\n');
+ tamingFrameReady = true;
+ readyTrigger();
}
function loadedGuestFrame() {
+ guestFrameReady = true;
+ readyTrigger();
+ }
+
+ function readyTrigger() {
+ if (guestFrameReady && tamingFrameReady) {
+ window.setTimeout(ready, 0);
+ }
+ }
+
+ function ready() {
var guestWin = guestFrame.contentWindow;
var imports = guestWin.___.getNewModuleHandler().getImports();
@@ -207,17 +223,10 @@ caja___ = (function() {
guestWin.___.getNewModuleHandler().setImports(imports);
guestWin.___.useDebugSymbols = function(){};
- var gdoc = guestWin.document;
- gdoc.write('<script>\n');
- gdoc.write('eval(parent.caja___.getPendingScript());');
- gdoc.write('parent.gadgets.util.runOnLoadHandlers();\n');
- gdoc.write('<\/script>\n');
- gdoc.write('</head></html>');
- gdoc.close();
+ guestWin.cajaRun(pendingScript);
}
return {
- getPendingScript: getPendingScript,
getTameGlobal: getTameGlobal,
getUseless: getUseless,
loadedGuestFrame: loadedGuestFrame,