JavaScript 调用`setTimeout` 在 Oracle Apex 中不起作用

Posted

技术标签:

【中文标题】JavaScript 调用`setTimeout` 在 Oracle Apex 中不起作用【英文标题】:JavaScript call `setTimeout` not working in Oracle Apex 【发布时间】:2010-06-29 14:09:13 【问题描述】:

我正在尝试在 Oracle ApeX 的 Stack Overflow 中从该线程运行此代码,看起来 setTimeout 调用似乎无法正常工作:

[see thread][1]

<html lang="en">
<head>
<title>Dashboard Example</title>
<style type="text/css">
body, html  margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; 
iframe  border: none; 
</style>
<script type="text/javascript">
var Dash = 
    nextIndex: 0,

    dashboards: [
        url: "http://www.google.com", time: 5,
        url: "http://www.yahoo.com", time: 10,
        url: "http://www.***.com", time: 15
    ],

    display: function()
    
        var dashboard = Dash.dashboards[Dash.nextIndex];
        frames["displayArea"].location.href = dashboard.url;
        Dash.nextIndex = (Dash.nextIndex + 1) % Dash.dashboards.length;
        setTimeout(Dash.display, dashboard.time * 1000);
    
;

window.onload = Dash.display;
</script>
</head>
<body>
<iframe name="displayArea"  ></iframe>
</body>
</html>

如何让这个调用在 Oracle ApEx v3.0.1 中工作?

【问题讨论】:

【参考方案1】:

这个问题与 Apex 无关 - 事实上,您可以获取您发布的 HTML,将其保存到文件中,然后在浏览器中运行该文件以进行测试。

不幸的是,www.google.com 是一个不适用于此代码的 URL,因为它包含自己的一些“framebusting”Javascript,可以将其从框架中弹出到浏览器窗口中,之后您的代码是 no运行时间更长。 ***.com 做了类似的事情。 例如,如果您将第一个 URL 更改为 www.bbc.com,那么它会正常工作(无论如何在 IE 上),直到它到达 stakoverflow.com,然后它会从框架中弹出。

【讨论】:

了解它在 IE6 中运行良好,但只是为了让您知道,我实际上没有使用框架,而是使用 document.getElementById("iframe").src = dashboard 更改代码以引用 iframe src .url 我认为问题出在 Apex 中的 setTimeout 调用上。作为一个测试 Tony,在上面的代码中创建一个虚拟函数来提醒一条消息并使用 setTimeout("yourFunction();",5000) 调用该函数,希望您会看到它不起作用。请让我们知道 - 谢谢。 此外,我正在使用我的 Intranet 网址,而不是在我的代码中引用 google.com 或 *** 网址。 好的,我没有 Apex 3.0,但在 apex.oracle.com 上使用 Apex 4.0 对其进行了测试,它工作正常:apex.oracle.com/pls/otn/f?p=37742:1 抱歉,我应该说一旦我在框架中添加了“displayArea”的 ID,它就可以正常工作了。

以上是关于JavaScript 调用`setTimeout` 在 Oracle Apex 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Javascript在class内使用setTimeout()调用类内部函数 - js class 调用自身

JavaScript中定时调用函数 test()如何写

javascript中setTimeout每隔1秒调用一次ajax,但回调函数只调用一次。求解。。

js setTimeout如何调用自身所在的函数(有参数传递的)?

setTimeout延迟加载javascript

调用 setTimeout 会清除调用堆栈吗?