【发布时间】: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