首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打开自定义协议后关闭浏览器窗口

打开自定义协议后关闭浏览器窗口
EN

Stack Overflow用户
提问于 2013-07-09 10:02:52
回答 3查看 2.9K关注 0票数 5

我创建了一个ASP.Net应用程序页面来处理打开FileSite链接。有一个自定义协议是正确处理链接,即它打开文件,但它留给我一个空的浏览器页面,因为文件被启动。

我有三个工作方案

  1. 直接指向处理页面的链接将启动文件并关闭浏览器。
  2. 来自Intranet上另一个页面的链接将启动处理页面,打开文件并返回到起始页
  3. 从Intranet上的对话框链接打开处理页面,启动文件,然后关闭处理页面

我拥有的代码如下( code是设置FileUrl并选择调用这两个函数的函数)

代码语言:javascript
运行
复制
<script type="text/javascript" language="javascript">

    // Files opened directly from link
    function OpenFileSiteLink() {
        window.location.href = '<%= FileUrl %>';
    }

    // Files opened from within Intranet
    function OpenFileSiteLinkReferrer(referrer, dialogOpened) {

        window.open('<%= FileUrl %>');

        if (dialogOpened) {
            window.open('close.html', '_self');
        } else {
            window.location.href = referrer;
        }
    }

</script>

close.html文件中的代码只有以下内容

代码语言:javascript
运行
复制
 <script type="text/javascript"> window.close();</script>

这是取自如何关闭浏览器窗口而不收到“您要关闭此窗口”提示?

任何建议,我可以打开协议,以启动应用程序,而不需要额外的对话框,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-18 18:39:31

最不麻烦和最可靠的方法来做这是最烦人的实现。不幸的是,IE9/10和Firefox已经堵塞了常规的方法来实现这一点,因此您可能没有其他选择。

策略是从父窗口弹出,而不是直接打开它。您将需要创建一个函数来在弹出窗口中加载适当的url,然后将其应用到链接到处理程序的url的每个链接的onclick中。然后,将此脚本包含在站点上的每个页面上。我还假设每个文件url都是唯一的,但是具有某种类型的公共基url。如果不是这样,您还需要设置一个标识类或属性。进行替换的职能将大致如下:

代码语言:javascript
运行
复制
var replaceHandlerLinks = function () {
    var fileLinks = document.querySelectorAll("[href*='/beginning/to/file/path']");
    for (var i = 0; i < fileLinks.length; i++) {
        fileLinks[i].onclick = function () {
            var fileOpener = window.open(fileLinks[i].href);
            //depending on how long your file takes to load, you may need to wait here
            fileOpener.close();
        }
    }
}

这明显的缺点是,指向这些文件的任何链接都需要来自您控制的页面。另外,请注意,我正在使用document.querySelectorAll来锁定链接href元素。这意味着按钮等将不能与这个特定的功能一起工作。使用与JQuery更加兼容/健壮的浏览器查询,或者在所有所需的按钮、链接等上设置类,将使这成为一种更完整的方法。

另一种类似的方法,如果您需要从您不控制的页面链接,将始终链接到同一个页面从任何地方使用param,例如"/openfile.aspx?file=actualFilePath",然后从该页面打开一个弹出加载文件,观察新窗口,并关闭它的文件完成。然后,尝试根据场景重定向当前窗口: 1)转到主页/ landing/ etc,2)转到referrer,3)在可能的情况下转到intranet登陆/推荐。这并不像从内部关闭一个弹出窗口那样优雅,但它解决了丑陋的空白窗口。

这两种方法都不是十全十美的,但除了限制用户使用IE8和chrome之外,您可能别无选择。

票数 5
EN

Stack Overflow用户

发布于 2013-07-12 12:58:16

如果您尝试导航到一个<iframe>而不是一个新窗口,那该怎么办?

尝试向DOM添加一个新的<iframe>,导航到您的自定义url,然后从DOM中删除<iframe>。不必费心加载close.html页面。

(免责声明:说实话,这只是个主意,我没有试过)

票数 2
EN

Stack Overflow用户

发布于 2018-03-15 11:42:22

iframe解决方案适用于我:

代码语言:javascript
运行
复制
        var divgfa = document.getElementById('gfa');
        var iframe = document.createElement("iframe");
        iframe.src = "ticket://<?= $print ?>";
        iframe.name = "frame"
        divgfa.appendChild(iframe);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17545430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档