【问题标题】:Is it possible to intercept html, css and js files used in angularjs?是否可以截取angularjs中使用的html、css和js文件?
【发布时间】:2015-04-15 15:14:01
【问题描述】:

我已经创建了一个 http 拦截器,根据我的观察,它只适用于所有使用 $http 服务的人。如果我想拦截模板中使用的 css、html 和 js 文件怎么办?有可能吗?

这是我上面提到的拦截器的代码:

app.factory('redirectInterceptor', function($q,$location,$window){
return  {
    'response':function(response){
    if (typeof response.data === 'string' && response.data.indexOf("My Login Page")>-1) {
        $window.location.href = "/login.html";
        return $q.reject(response);
    }else{
        return response;
    }
    }
}

});

app.config(['$httpProvider',function($httpProvider) {
    $httpProvider.interceptors.push('redirectInterceptor');
}]);

我希望能够像上面那样为 css、html 和 js(用于模板)做一个拦截器。

【问题讨论】:

  • 您正在尝试做的事情,似乎更适合服务器端实现。
  • 可以拦截html文件
  • @Chandermani 当会话到期并且我尝试访问需要身份验证的页面时,该页面将为空白。当我使用 firebug 进行调试时,我可以看到一些 css 和 js 正在被调用,但响应是 302。但是没有发生重定向。我想做一个拦截器,它会做和我发布的代码一样的事情。
  • Angular 中没有这方面的内容。但是看看有没有浏览器的js api。
  • @entre 怎么样? js和css呢?

标签: angularjs angular-http-interceptors


【解决方案1】:

如你所说,

它只适用于所有使用 $http 服务的人

所以,如果你想拦截对 html、css 和 js 文件的请求。最好在服务器上完成,而不是在客户端上。

【讨论】:

  • 实际上,这只是基于我的观察,所以我期待 1) 有人会同意我所说的并可能会给我一个解决方案,或者 2) 有人会不同意并纠正我。不管怎样,我已经和那个服务员谈过了,让他做一些修改,但他坚持要在前面做。
【解决方案2】:

你可以拦截html文件

    var requestInterceptor = function (config) {

        if (config.url.indexOf(".html") != -1) {
            //custom logic
        }
   }

尽管上述方法不适用于.js.css,因为它们是使用标签加载的。

.html 文件保存在模板缓存中并触发 $http 请求...

尽管您应该继续通过在拦截器中执行console.log(config.url) 来测试所有请求的内容,以确保......

【讨论】:

    【解决方案3】:

    这是一个经典的 X-Y 问题。您正在考虑解决问题的方法,但这是错误的解决方法。

    您的评论中的这一行解释了实际问题:

    但是我指的js文件是项目的业务逻辑。因此,将其公开不是一种选择。

    所以,您的问题是您不想将业务逻辑暴露给尚未/无法登录的人。

    对此有多种解决方案。但这一切都归结为一件事:将您的业务逻辑与用于 UI 等的常见 js 代码分开

    一旦您将 js 分成两部分(不一定是两个文件,但必须至少是两个文件,可以更多),您就可以公开您的公共 js 文件。然后你可以决定如何处理加载你的业务逻辑:

    1. 让它失败

      这可能是最简单的策略。什么都不做,它将无法加载。大概您只需要登录页面上的业务逻辑,因此在登录页面或登录页面中没有它应该不是问题。

    2. 将其动态包含在模板中

      如果用户未登录,只需省略加载业务逻辑js的脚本标签即可。

    3. 在 JS 中动态加载业务逻辑

      要么使用 AJAX 加载它然后评估它,要么使用 require.js 或使用 jQuery getScript() 或类似的东西,仅在用户登录时加载业务逻辑。

    如果您有创意,您可能会想出更多方法来处理加载业务逻辑 JS。不管是什么,关键是你要把常用的js和css文件公开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-26
      • 2020-07-25
      • 2011-05-04
      • 1970-01-01
      • 2021-09-17
      • 2021-01-02
      • 2015-05-17
      • 2016-11-10
      相关资源
      最近更新 更多