异步加载阻止了未引用的“ href”属性

时间:2018-10-23 16:02:22

标签: jquery html minify

我使用搜索工具管理一个静态网站,该工具使用“分类法术语”结构作为数据源,以查找与某些条件匹配的链接,然后将这些链接异步加载并解析以构建UI。

分类术语的结构是这样的:

<ul>
    <li data-term="TaxonomyTermOfFirstLevel">TaxonomyTermOfFirstLevel
        <ul>
            <li data-term="TaxonomyTermOfSecondLevel">TaxonomyTermOfSecondLevel
                <ul>
                    <li data-term="TaxonomyTerm">
                        <a href="https://www.example.com/some-page/">Some Page</a>
                    </li>
                </ul>
             </li>
         </ul>
      </li>
</ul>

以及(部分)加载例程:

var cache = {};

function load( url ) {

    if( ! cache[ url ] ) {
        cache[ url ] = $.ajax( url );
    }

    return cache[ url ];
}

使用未缩小的HTML输出,一切正常。但是,当使用也删除属性周围引号的极端工具将其最小化时,对上述结构中发现的所有URL的所有请求都将失败,并显示以下错误:

  

混合内容:“ https://www.example.com/search/”上的页面已通过HTTPS加载,但请求了不安全的XMLHttpRequest端点“ http://www.example.com/some-page/”。该请求已被阻止;内容必须通过HTTPS提供。

如您所见,请求者(/search)和被请求者(/some-page)位于同一域中,但浏览器表示所请求的URL不安全,因为它不在SSL之下。但是,如果您查看我提供的片段,则请求的URL 确实具有 https模式前缀。

仅当我停用输出以使所有返回到工作状态的输出最小化时,我才进行了详尽的搜索,没有成功。然后,我分析了涉及搜索过程的所有内容,从HTML到负责搜索的每个JS文件(毕竟这是一个静态网站),我只注意到两个区别:

  • (明显)href属性周围没有引号。
  • URL指向根目录中的文件夹的事实,每个文件夹都有一个index.html文件(即/same-page/index.html),从而导致伪友好URL的重定向。但是据我了解,这不是问题,因为jQuery会透明地遵循重定向,对吗?

在这种情况下,我可以选择使用另一个不会删除引号的缩小器代替tdewolff's minifier(用于创建所有HTML文件的Hugo Static Site Generator的内置选择)。

还有其他我想念的东西吗?

1 个答案:

答案 0 :(得分:0)

由于静态网站中的“友好网址”只是嵌套目录,其中包含index.html文件,因此所有要求必须结尾的URL都必须在末尾加斜杠-OR-并附加上述文件在向AJAX提出请求之前。

但是,如本主题所述(在this testing repository中有深入介绍),无论所有URL 都在背景中的某个点后有 都是斜杠,在异步请求过程中,这些尾部斜杠将被删除,忽略,或者考虑到涉及到HTML压缩程序的事实,被浏览器误解。

为了解决此问题,我只在要请求的URL后面加了一个斜杠。由于上面显示的包装函数load非常通用,因此我无法解决这种情况,因为并非所有的URL都会产生301重定向,所以,我只在检索到之后才应用此修复程序href属性:

var url = $( 'some selector' ).find( 'a' ).attr( 'href' ).replace( /\/?$/, '/' );

“孔中的王牌”是replace函数,它将使现有的尾部斜杠保持不变,但会在缺失的地方添加一个斜杠,无论是错误构建的<a>标签还是错误删除-似乎正在发生什么。

  

注意:要进一步了解上下文和上述修补程序,请检查已链接的存储库,或者至少检查所提及的缩小器在this issue上的扩展讨论。

我希望这对以后的人有所帮助,因为至少可以找到与特定软件无关的内容作为搜索结果。