javascript - 设置 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);
});
有没有人对如何解决这个问题有任何建议或替代方案?我有一个解决方法,但这是一个有缺陷的安全风险。
解决方案
原始代码现在似乎可以在 Safari 中运行,但我不确定原因。我在以前的尝试中清除了开发人员缓存。也许还有其他我不知道的缓存。如果您尝试按 id 选择框架,它将不适用于非 iframe。
$('frame[name="RegtypeFrame"]', window.parent.document).attr("src", url);
推荐阅读
- python - 为什么在 ProcessPoolExecutor 中引发自定义异常时必须具有默认参数?
- node.js - 记录节点进程拒绝/太忙而无法响应新请求的时间
- python - 构建期间在 Dockerfile 中激活和切换 Anaconda 环境
- php - 如何使用 PHP 发送 iOS 推送通知?
- android - 尝试获取位置时避免 Google 的提示
- java - 如何在运行 maven 项目时消除特定错误
- python - 有没有办法测试数组中的所有数字是否都大于 A,如果是,则将其替换为相同长度的数组
- google-apps-script - 每月重置 Google 表单回复
- c - 在 SDL2 中获取鼠标位置的纹理坐标?
- terraform - terraform ssh:握手失败:ssh:无法验证,尝试的方法 [none publickey],没有支持的方法