【问题标题】:Setting HTML frame src not working in Safari设置 HTML 框架 src 在 Safari 中不起作用
【发布时间】:2018-12-13 22:50:27
【问题描述】:

我的任务是重写从 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);
});

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

【问题讨论】:

    标签: javascript java jquery html jsp


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2022-08-04
      相关资源
      最近更新 更多