0

我有一个从HTA. 我从一个file://然后立即将用户重定向到一个 web url开始location.href="http://server/path"

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

想法:

  • XHR到 url 以在导航到 url 之前获取 HTTP 响应代码。(权限问题,因为站点不相同:file:// -> http://)
  • SCRIPT元素到 url 处的已知路径。
  • 中的访问网址FRAME。然后从结果页面或从HTA.

笔记:

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

4

3 回答 3

0

如果您有权访问目标网页,onload请在网页上对注册成功加载的调用方服务器进行 ping ( )。

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

总之,您需要的是:

  1. 为页面请求注册“加载状态”的 Web 服务。将加载状态保存在中央数据库中
  2. 在页面完全加载后,在加载网页上调用此 Web 服务。出错时同样设置状态。
  3. 在您的 HTA 中创建一个检查(并显示)加载状态的计时器。并根据最终状态行事。
于 2011-10-29T19:06:59.320 回答
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>
于 2011-10-29T18:54:22.070 回答
0

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

于 2011-10-29T22:43:51.913 回答