You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by ma...@apache.org on 2007/01/13 12:53:29 UTC
svn commit: r495893 -
/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js
Author: matzew
Date: Sat Jan 13 04:53:29 2007
New Revision: 495893
URL: http://svn.apache.org/viewvc?view=rev&rev=495893
Log:
applied fix for ADFFACES-351. Thanks to Blake Sullivan
Modified:
incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js?view=diff&rev=495893&r1=495892&r2=495893
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js Sat Jan 13 04:53:29 2007
@@ -572,28 +572,62 @@
return maxWidth + offsetLeft;
}
+/**
+ * Safely returns the parent window of a window, or undefined if security doesn't allow us to
+ * retrieve the parent
+ */
+function _getParentWindow(currWindow)
+{
+ var parentWindow = currWindow.parent;
-function _getTop(
- element
- )
+ try
+ {
+ // dummy read to test security error
+ parentWindow.name;
+
+ return parentWindow;
+ }
+ catch (e)
+ {
+ return undefined;
+ }
+}
+
+/**
+ * Returns the window for the document
+ */
+function _getWindowForDocument(document)
{
- if (!(_agent.isGecko || _agent.isSafari))
+ if (_agent.isIE)
{
- return top;
+ return document.parentWindow;
}
else
{
- var currWindow = (element)
- ? element.window
- : window;
-
- while (currWindow.parent && (currWindow.parent != currWindow))
- {
- currWindow = currWindow.parent;
- }
+ return document.defaultView;
+ }
+}
- return currWindow;
+/**
+ * Safely retrieve the top accessible window
+ */
+function _getTop(element)
+{
+ var initialDocument = (element)
+ ? element.ownerDocument
+ : document;
+
+ // since top might be in another domain, crawl up as high as possible manually
+ var currWindow = _getWindowForDocument(initialDocument);
+ var currParentWindow = _getParentWindow(currWindow);
+
+ while (currParentWindow && (currParentWindow != currWindow))
+ {
+ currWindow = currParentWindow;
+ currParentWindow = _getParentWindow(currWindow);
}
+
+ return currWindow;
}
@@ -963,6 +997,7 @@
// within a frame. So, we check for the _abandoned property
// on the "top" window.
var topWindow = _getTop();
+
return topWindow._abandoned;
}
@@ -3589,8 +3624,7 @@
function _submitPartialChange(
form,
doValidate,
- parameters
- )
+ parameters)
{
// If there's no PPR iframe, then just perform a normal,
// full-page submission.
@@ -3610,9 +3644,11 @@
// We need to set the target of the form to be the PPR iframe.
// Save the old target and set the new one.
var oldTarget = form.target;
- if(!_agent.isPIE){
- form.target = _pprIframeName;
+ if(!_agent.isPIE)
+ {
+ form.target = _pprIframeName;
}
+
// Before we fire, update the request count
_pprRequestCount++;
@@ -3621,13 +3657,13 @@
// IE only adds to the history list if something has already been done on
// this page, so until there has been some action, we don't
// increment/decrement at all.
- if ((!_agent.isIE) || parent._pprSomeAction)
+ if (!_agent.isIE || window._pprSomeAction)
{
delta = 1;
}
_pprSubmitCount += delta;
- parent._pprSomeAction = true;
+ window._pprSomeAction = true;
// block all mouse clicks until the submit is done
if (!_agent.isPIE)
@@ -3694,7 +3730,7 @@
var toLoadArray = new Array();
var toLoadIndex = 0;
- if (window["_pprLibraries"] != (void 0))
+ if (window["_pprLibraries"] != undefined)
{
// loop through each library in _pprLibraries
// if it is not in the cached libraries list, then
@@ -4635,7 +4671,9 @@
// If we're inside a frameset, and the top frame wants
// reloads blocked, install a _noReload handler.
// chain _monitor also if that is already set.
- if ((self != top) && top["_blockReload"])
+ var topWindow = _getTop();
+
+ if ((self != topWindow) && topWindow["_blockReload"])
{
// If _monitor is already set on document.onkeydown, then
// chain _noReload and _monitor by calling another function which
@@ -5560,4 +5598,4 @@
}
// regular expression to gather whitespace at beginning and end of line
-TrUIUtils._TRIM_ALL_RE = /^\s*|\s*$/g;
\ No newline at end of file
+TrUIUtils._TRIM_ALL_RE = /^\s*|\s*$/g;