Нет общего сеанса и избежать кнопок навигации в браузере при открытии окна приложения - PullRequest
1 голос
/ 23 сентября 2011

Мы используем код VBScript, чтобы открыть окно приложения, чтобы пользователи не могли перемещаться вперед / назад при открытии окна IE8 .

Этот код используется.

Set WshShell = CreateObject("shell.application")
Set IE=CreateObject("InternetExplorer.Application")
IE.menubar = 1
IE.toolbar = 0
IE.statusbar = 0
'here we open the application url
IE.navigate "http://www.google.com" 
IE.visible = 1
WshShell.AppActivate(IE)

Это работает нормально, однако проблема в том, что если пользователь открывает несколько окон, сеансовые куки-файлы распределяются по всем окнам.

Для этого также есть решение, которое мы можем использовать, когда параметр nomergeоткрытие IE

WshShell.ShellExecute "iexplore.exe", " -nomerge http://www.google.com", null, null, 1

Теперь мы хотим, чтобы обе эти опции были доступны.т. е. пользователь не должен иметь возможность перемещаться вперед / назад, а также, если два окна открыты, данные не должны совместно использоваться.

Мы не смогли заставить обе эти вещи работать вместе.

Также нам не нужен какой-либо полноэкранный режим (то есть после нажатия клавиши F11)

Может ли кто-нибудь предложить решение?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 28 сентября 2011

См. Ответы на этот очень тесно связанный вопрос: Запустите Internet Explorer 7 в новом процессе без панелей инструментов .Есть несколько работоспособных опций, один из которых использует Powershell, а другой - какой-то хитрый VBScript.

0 голосов
/ 29 сентября 2011

Решение, упомянутое в ссылке, на которую ответил patmortech, не является идеальным, поскольку файлы cookie все еще были общими . Поэтому использовалась опция -nomerge в переменной AppToRun, которая создает два процесса, когда пользователь дважды открывает приложение на одном компьютере.

В IE8, если открыты два обозревателя Интернета, они объединяются в один процесс, поэтому опция -nomerge открывает экземпляры IE8 в разных процессах.

 On Error Resume Next

AppURL = "http://www.stackoverflow.com"
AppToRun = "iexplore -nomerge"
AboutBlankTitle = "Blank Page"
LoadingMessage = "Loading stackoverflow..."
ErrorMessage = "An error occurred while loading stackoverflow.  Please close the Internet Explorer with Blank Page and try again.  If the problem continues please contact IT."
EmptyTitle = ""

'Launch Internet Explorer in a separate process as a minimized window so we don't see the toolbars disappearing
dim WshShell
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run AppToRun, 6

dim objShell
dim objShellWindows

set objShell = CreateObject("Shell.Application")
set objShellWindows = objShell.Windows

dim ieStarted
ieStarted = false

dim ieError
ieError = false

dim seconds
seconds = 0

while (not ieStarted) and (not ieError) and (seconds < 30)

    if (not objShellWindows is nothing) then
        dim objIE
        dim IE

        'For each IE object
        for each objIE in objShellWindows

            if (not objIE is nothing) then

                if isObject(objIE.Document) then
                    set IE = objIE.Document

                    'For each IE object that isn't an activex control
                    if VarType(IE) = 8 then

                        if IE.title = EmptyTitle then
                            if Err.Number = 0 then
                                IE.Write LoadingMessage

                                objIE.ToolBar = 0
                                objIE.StatusBar = 1
                                objIE.Navigate2 AppURL

                                ieStarted = true
                            else
                                'To see the full error comment out On Error Resume Next on line 1
                                MsgBox ErrorMessage
                                Err.Clear

                                ieError = true

                                Exit For
                            end if
                        end if
                    end if
                end if
            end if

            set IE = nothing
            set objIE = nothing
        Next
    end if

    WScript.sleep 1000
    seconds = seconds + 1
wend

set objShellWindows = nothing
set objShell = nothing

'Activate the IE window and restore it
success = WshShell.AppActivate(AboutBlankTitle)

if success then 
    WshShell.sendkeys "% r"  'restore 
end if
0 голосов
/ 23 сентября 2011

Насколько я понимаю, куки устанавливаются по экземплярам.Несколько окон браузера по-прежнему будут одним и тем же экземпляром.

Возможно, вы сможете передать своего рода параметр ID, который программа отслеживает, но браузер этого не делает.Таким образом, независимо от того, как работает программа, у нее будет свой собственный идентификатор сессии.

Я думаю, что вы можете сделать это с помощью javascript и прочитать его, используя скрытое поле asp.net.Это может дать вам уникальность, которую вы ищете.

<asp:HiddenField ID="HiddenFieldSessionID" runat="server" />

protected void Page_Load(object sender, EventArgs e)
{
    HiddenFieldSessionID.Value = Session.SessionID;
}


<script type="text/javascript">
    function ShowSessionID()
    {
        var Hidden;
        Hidden = document.getElementById("HiddenFieldSessionID");

        document.write(Hidden.value);
    }
</script>
...