### Eclipse Workspace Patch 1.0 #P org.eclipse.swt Index: Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java,v retrieving revision 1.30.2.1 diff -u -r1.30.2.1 IE.java --- Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java 26 Jun 2008 14:32:30 -0000 1.30.2.1 +++ Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java 15 Jan 2010 12:51:18 -0000 @@ -35,8 +35,10 @@ int lastMouseMoveX, lastMouseMoveY; static boolean SilenceInternalNavigate; + static int IEVersion; static String ProgId = "Shell.Explorer"; //$NON-NLS-1$ + static final int navNoReadFromCache = 0x4; static final int BeforeNavigate2 = 0xfa; static final int CommandStateChange = 0x69; static final int DocumentComplete = 0x103; @@ -146,13 +148,12 @@ int index = versionString.indexOf ("."); //$NON-NLS-1$ if (index != -1) { String majorString = versionString.substring (0, index); - int major = 0; try { - major = Integer.valueOf (majorString).intValue (); + IEVersion = Integer.valueOf (majorString).intValue (); } catch (NumberFormatException e) { /* just continue, version-specific features will not be enabled */ } - if (major >= 7) { + if (IEVersion >= 7) { SilenceInternalNavigate = true; } } @@ -904,14 +905,32 @@ auto.invoke(rgdispid[0]); } - int[] rgdispid = auto.getIDsOfNames(new String[] { "Navigate", "URL" }); //$NON-NLS-1$ //$NON-NLS-2$ + int[] rgdispid = auto.getIDsOfNames(new String[] { "Navigate", "URL", "Flags" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ navigate = true; - Variant[] rgvarg = new Variant[1]; - rgvarg[0] = new Variant(url); - int[] rgdispidNamedArgs = new int[1]; - rgdispidNamedArgs[0] = rgdispid[1]; + Variant[] rgvarg; + int[] rgdispidNamedArgs; + /* + * Feature in Internet Explorer 8. Browser caches web pages and for the + * same address display always the same page until not refreshed. Setting + * flag navNoReadFromCache solves this problem. See bug #298822 + */ + if (IEVersion >= 8) { + rgvarg = new Variant[2]; + rgvarg[0] = new Variant(url); + rgdispidNamedArgs = new int[2]; + rgdispidNamedArgs[0] = rgdispid[1]; + rgvarg[1] = new Variant(navNoReadFromCache); + rgdispidNamedArgs[1] = rgdispid[2]; + } else { + rgvarg = new Variant[1]; + rgvarg[0] = new Variant(url); + rgdispidNamedArgs = new int[1]; + rgdispidNamedArgs[0] = rgdispid[1]; + } Variant pVarResult = auto.invoke(rgdispid[0], rgvarg, rgdispidNamedArgs); - rgvarg[0].dispose(); + for (int i = 0; i < rgvarg.length; i++) { + rgvarg[i].dispose(); + } if (pVarResult == null) return false; boolean result = pVarResult.getType() == OLE.VT_EMPTY; pVarResult.dispose();