使用 SWT 使用新会话和 cookie 在新浏览器中打开 URL
Open URL in new browser with new session and cookies using SWT
我想在外部浏览器中使用 URL 的新会话和 cookie 打开一个 URL。每次打开 URL 时,都应在带有新 cookie 的新浏览器中打开。
我的问题是,每当我尝试在新浏览器中打开 URL 时,旧会话就会过期并且旧浏览器 window 不再有用。 URL 参数每次都会不同。我试过使用 SWT 的内部浏览器和外部浏览器。
尝试过 Browser.setCookies(value,url);
还是不行。
对于外部浏览器:
public void openUrl(String url){
IWebBrowser browser = PlatformUI.getWorkbench()
.getBrowserSupport()
.createBrowser(IWorkbenchBrowserSupport.AS_EXTERNAL, browserId, name, tooltip);
browser.openUrl(url);
}
对于内部浏览器:
public void launchUrl(String url){
Browser browser = (Browser) getBrowserShellNew().getData(BROWSER); // Browser is a static String "BROWSER"
browser.setUrl(url);
}
private Shell getBrowserShellNew(){
Display display=PlatformUI.getWorkbench().getDisplay();
Shell shell = new Shell(display);
shell.setText("title");
Rectangle screenBounds = null;
if (display.getMonitors().length > 1) {
screenBounds = display.getMonitors()[1].getBounds();
} else {
screenBounds = display.getMonitors()[0].getBounds();
}
shell.setBounds(screenBounds);
shell.setLayout(new FillLayout());
shell.setMaximized(true);
Browser browser = new Browser(shell, SWT.NONE);
browser.setMenu(new Menu(browser));
shell.setData(BROWSER, browser);
shell.open();
shell.forceActive();
shell.forceFocus();
return shell;
}
原因肯定是,所有浏览器实例都使用来自会话的相同 cookie。需要以某种方式为每次 URL 启动创建一个带有 cookie 的新会话。使用外部浏览器。
我认为你有三个选择:
1) Browser.clearSessions()
2) OS.InternetSetOption(0, OS.INTERNET_OPTION_END_BROWSER_SESSION, 0, 0);
3) 如果您在 Windows 机器上或另一台 OS 中的相应文件夹...
,请删除 %AppData%\Roaming\Microsoft\Windows\Cookies
的内容
祝你好运...
经过一些调查,我找到了通过在启动 URL 时将参数传递给 IE 来实现此目的的方法。正如我已经在对答案的评论中提到的那样。
以下是对我有用的解决方案。
Runtime.getRuntime().exec("C:\Program Files\internet explorer\iexplore.exe -noframemerging \"http://helloworld.com\"");
注意:这仅适用于 IE 和 windows 操作系统。
我想在外部浏览器中使用 URL 的新会话和 cookie 打开一个 URL。每次打开 URL 时,都应在带有新 cookie 的新浏览器中打开。
我的问题是,每当我尝试在新浏览器中打开 URL 时,旧会话就会过期并且旧浏览器 window 不再有用。 URL 参数每次都会不同。我试过使用 SWT 的内部浏览器和外部浏览器。
尝试过 Browser.setCookies(value,url);
还是不行。
对于外部浏览器:
public void openUrl(String url){
IWebBrowser browser = PlatformUI.getWorkbench()
.getBrowserSupport()
.createBrowser(IWorkbenchBrowserSupport.AS_EXTERNAL, browserId, name, tooltip);
browser.openUrl(url);
}
对于内部浏览器:
public void launchUrl(String url){
Browser browser = (Browser) getBrowserShellNew().getData(BROWSER); // Browser is a static String "BROWSER"
browser.setUrl(url);
}
private Shell getBrowserShellNew(){
Display display=PlatformUI.getWorkbench().getDisplay();
Shell shell = new Shell(display);
shell.setText("title");
Rectangle screenBounds = null;
if (display.getMonitors().length > 1) {
screenBounds = display.getMonitors()[1].getBounds();
} else {
screenBounds = display.getMonitors()[0].getBounds();
}
shell.setBounds(screenBounds);
shell.setLayout(new FillLayout());
shell.setMaximized(true);
Browser browser = new Browser(shell, SWT.NONE);
browser.setMenu(new Menu(browser));
shell.setData(BROWSER, browser);
shell.open();
shell.forceActive();
shell.forceFocus();
return shell;
}
原因肯定是,所有浏览器实例都使用来自会话的相同 cookie。需要以某种方式为每次 URL 启动创建一个带有 cookie 的新会话。使用外部浏览器。
我认为你有三个选择:
1) Browser.clearSessions()
2) OS.InternetSetOption(0, OS.INTERNET_OPTION_END_BROWSER_SESSION, 0, 0);
3) 如果您在 Windows 机器上或另一台 OS 中的相应文件夹...
,请删除%AppData%\Roaming\Microsoft\Windows\Cookies
的内容
祝你好运...
经过一些调查,我找到了通过在启动 URL 时将参数传递给 IE 来实现此目的的方法。正如我已经在对答案的评论中提到的那样。 以下是对我有用的解决方案。
Runtime.getRuntime().exec("C:\Program Files\internet explorer\iexplore.exe -noframemerging \"http://helloworld.com\"");
注意:这仅适用于 IE 和 windows 操作系统。