首页 > 解决方案 > 设置 HTML 框架 src 在 Safari 中不起作用

问题描述

我的任务是重写从 2000 年开始构建的 Javascript 代码,因为它只适用于 IE 浏览器。它需要在所有浏览器中工作。

显然,这早在 AJAX 之前,他们使用框架集(甚至还没有 iframe)将远程 JSP/servlet 调用执行到 HTML 框架中。这些框架不显示除主框架之外的任何 HTML。然后,您需要确保更新代码引用以了解从哪个帧执行哪些代码。框架令人头疼,但我已经让这些调用在除 Safari 之外的所有浏览器中工作。

$('frame[name="RegtypeFrame"]', window.parent.document).attr("src", url);

从那里,我将转到最顶部的文档以查找要加载的特定框架。url 变量是一个 JSP 页面,其中包含由 Java scriptlet 创建的 javascript。噩梦,是的,但我没有时间/批准从头开始重写。

我在 Safari 中尝试过 window.top 但没有运气。代码在 Safari 中根本不执行。我还尝试使用适用于所有浏览器的 AJAX GET 完全绕过框架,但由于它是 javascript,我必须使用 eval,这是一个有效的安全风险。

$.ajax(
{
    url: url,
    method: "GET",
    async: true,
    dataType: "html"
}).done(
function(html)
{
    // major security risk to use eval on remote javascript code
    var dom = $(jQuery.trim(html));
    dom.filter('script').each(function()
    {
        $.globalEval(this.text || this.textContent || this.innerHTML || '');
    });
}).fail(
function(jqXHR, textStatus)
{
    alert("Request failed: " + textStatus);
});

有没有人对如何解决这个问题有任何建议或替代方案?我有一个解决方法,但这是一个有缺陷的安全风险。

标签: javascriptjavajqueryhtmljsp

解决方案


原始代码现在似乎可以在 Safari 中运行,但我不确定原因。我在以前的尝试中清除了开发人员缓存。也许还有其他我不知道的缓存。如果您尝试按 id 选择框架,它将不适用于非 iframe。

$('frame[name="RegtypeFrame"]', window.parent.document).attr("src", url);

推荐阅读