繁体   English   中英

完整地加载带有Javascript的ASPX页面

[英]Loading ASPX page with Javascript intact, with a twist

我正在为Microsoft SharePoint编写一个单页Web应用程序。

我想使用$.get()引入内容,但是遇到了一些困难22。

如果我这样输入内容:

function getLocalPage(url, callback) {
    $.get(url, function(data) {
        var $page = $(data).filter('.tileContent').html();
        callback($page);
    });
}

我得到了我要查找的节点,但是我的脚本标签已被剥离。

如果我输入这样的内容:(引用: jquery html()剥离脚本标签

function getLocalPage(url, callback) {
    $.get(url, function(data) {
        var dom = $(data);
        dom.filter('script').each(function(){
            $.globalEval(this.text || this.textContent || this.innerHTML || '');
        });
        var $page = dom.filter('.tileContent');
        callback($page);
    });
}

SharePoint中嵌入的javascript使我的页面崩溃,并且似乎引起了完整的回发。

有什么办法可以使脚本标签保持完整,只获取我想要的节点?
似乎无法同时兼顾。

而不是简写的jQuery方法.get() ,请尝试使用dataType: 'html' .ajax()

.ajax()文档说的是dataType: 'html'

“ html”:以纯文本形式返回HTML; 插入到DOM中时,将评估包含的脚本标签。

它还说:

“如果指定了'html',则在将HTML作为字符串返回之前,将执行检索到的数据中的所有嵌入式JavaScript。”

这里的重点是“之前”一词,这意味着嵌入式JavaScript在执行时不能直接作用于与它一起交付的HTML(或产生的DOM片段),尽管它可以直接作用于现有DOM。片段插入。

但是,嵌入式JavaScript中包含的任何功能的确确实可以用于对HTML / DOM片段和整个DOM进行操作(如果稍后调用) 调用此类函数的第一个机会是在.ajax()成功处理程序(或链接的.done()处理程序)中。

除非采取非常规(可能会造成混乱)的措施,否则成功处理程序(或其调用的任何函数)将需要事先以这种方式交付的任何函数名称的“知识”,否则(实际上)它们将是不可调用的。

我不确定$(function() {...}); 结构, 可以在当前事件线程完成(?)后执行。 如果是这样,则有可能使其作用于所传递的HTML / DOM片段。 一定尝试。

考虑到所有这些,请尝试以下方法,并在响应中使用适当措辞的JavaScript。

function getLocalPage(url, callback) {
    $.ajax({
        url: url,
        dataType: 'html',
        success: function(data) {
            callback($(data).find('.tileContent'));
        }
    });
}

或更好 :

function getLocalPage(url, callback) {
    $.ajax({
        url: url,
        dataType: 'html'
    }).done(function(data) {
        callback($(data).find('.tileContent'));
    });
}

笔记:

  • 我将.filter()更改为.find() ,这似乎更合适,但您可能需要将其改回。
  • 您的最终版本可能还具有其他.ajax()选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM