【问题标题】:How to Force each link to open into a new IE Window via EmbeddedWB?如何通过 EmbeddedWB 强制每个链接打开到新的 IE 窗口?
【发布时间】:2015-03-23 13:49:27
【问题描述】:

是否可以将所有网页链接更改为在新的 IE 窗口中打开而不是在 EmbeddedWB 中打开?

我希望有类似的行为,就像您在 EmbeddedWB 中右键单击超链接并选择上下文菜单选项在新窗口中打开一样。 IE 本身在 EmbeddedWb 之外打开。

是否可以通过 OnBeforeNavigate2 执行此操作而不将 IE 作为新进程执行,我想使用相同的进程。 将 IE 打开到同一进程的原因是我希望 cookie 等能够正常工作。

【问题讨论】:

    标签: delphi internet-explorer winapi


    【解决方案1】:

    所以你想在你的应用程序中实现多窗口浏览,对吗?

    为此,您可以动态创建一个带有 TWebBrowser 组件的新窗口(一个表单),然后将该 TWebBrowser 导航到特定页面,而不是点击时所在的页面。

    或者可能创建一种选项卡式界面,其中每个选项卡上都有自己的 TWebBrowser 组件实例。

    或者,也许您甚至想在您自己的应用程序的新实例中展示这一点。在这种情况下,您需要开发您的应用程序,以便它可以接受额外的启动参数,这将告诉它在启动时应该导航到哪个网页。

    总之每次你都需要创建一个新的TWebBrowser 组件实例。是的,OnBeforeNavigate2 事件是正确的,因为您可以阻止原始 TWebBrowser 导航到单击超链接点的页面。

    【讨论】:

    • 我不想创建自己的网络浏览器,我只是希望 IExplorer 在您右键单击链接并选择在新窗口中打开时以类似的方式出现。
    • 所以你想在默认浏览器中打开链接?
    • 我想在 INTERNET EXPLORER 中打开链接。不是默认浏览器。否则,如果默认浏览器是 Chrome,则 EmbeddedWb 存储的 cookie 不起作用。
    • 那我恐怕不知道正确答案了。您可以尝试打开 Internet Explorer vie 命令行,您可以在其中指定其他参数来控制 IE 的显示方式或是否重用现有进程。有关命令行选项的更多信息,请查看:msdn.microsoft.com/en-us/library/ie/hh826025%28v=vs.85%29.aspx
    • 谢谢,我似乎在新进程和嵌入式之间传递了 cookie,所以我写了自己的代码回答这个 Q 希望你不介意?
    【解决方案2】:

    在 OnBeforeNavigate2 中单击链接后,像这样执行 IE 时,cookie 似乎是共享的。

    function ExecuteHtml(const URL :string): THandle;
    var
      zURL, zParams, zDir: array[0..255] of Char;
      filename: string;
    begin    
      Result := ShellExecute(Application.MainForm.Handle, 'open',
        pchar('Iexplore.exe'),StrPCopy(zURL, URL),
        StrPCopy(zDir, ''), SW_SHOWDEFAULT );
    
    end;
    

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 2011-07-07
      • 2013-10-09
      • 2011-02-24
      • 1970-01-01
      • 2010-11-01
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多