检测后续导航是否成功的方法

时间:2011-10-29 18:45:41

标签: javascript hta

我有一个从HTA启动的遗留应用程序。我从file://开始,然后立即将用户重定向到网址location.href="http://server/path"

有没有办法检测导航是否成功(或检测

思路:

  • XHR在网址导航到网址之前获取HTTP响应代码。 (因为网站不相同的许可问题:file:// - > http://)
  • SCRIPT元素到url的已知路径。
  • 访问FRAME中的网址。然后从结果页面或HTA成功重新加载父项。

注意:

URL将是一个托管在应用服务器上的动态页面(servlet)。静态内容(图像等)以不同方式托管。通过验证图像,它不能保证真实的URL工作。请有答案反映这种差异。 (谢谢!)

3 个答案:

答案 0 :(得分:0)

从服务器加载图片并收听onloadonerror个事件。图像可以只是一个像素的透明gif。

<img src="http://server/transparent.gif" onload="setServerAvailable(true);" onerror="setServerAvailable(false);" />

修改:您可以在iframe中加载页面。您可以通过JavaScript监控页面运行状况。使用HTA时,您无需担心同源策略。将此代码保存为HTA,然后加载HTA并单击按钮。您将看到您可以修改框架内容,即使它位于另一个域中:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Test Same Origin Policy in HTA</title>
        <script type="text/javascript">
            function modifyFrame()
            {
                var fr = document.body.getElementsByTagName("iframe")[0];
                fr.contentWindow.document.body.innerHTML = 
                    "Cross domain scripting works in HTA";
            }
        </script>
    </head>
    <body>
        <iframe src = "http://stackoverflow.com/questions/7940913/"></iframe>
        <br /><br />
        <button onclick="modifyFrame()">Modify cross-domain frame content</button>
    </body>
</html>

答案 1 :(得分:0)

如果您有权访问目标网页,请在网页上放置一个ping(onload)给调用者服务器注册成功加载。

根据您选择的技术,来自网页的ping可以是对服务器上的Web服务的简单调用,该服务在中央存储库(即数据库)中注册成功加载。您的HTA可以定期检查数据库的加载状态并采取相应的行动。

总之,您需要的是:

  1. 为页面请求注册“加载状态”的Web服务。保存 在中央数据库中加载状态
  2. 在加载网页上,在页面完全加载后调用此Web服务。出错时同样设置状态。
  3. 在您的HTA中创建一个检查(并显示)加载状态的计时器。并根据最终状态行事。

答案 2 :(得分:0)

CALLING页面无法直接知道其导航是成功还是失败。可以使用不同的方法来增加它发生的可能性,但最终它可能成功也可能不成功。