MyWebsite如何发布jQuery或AngularJS,该网站A和网站B可以使用,没有冲突?

oma*_*oma 5 javascript jquery cross-domain angularjs

假设我有一个网站MyWebsite,您可以在其中构建呼叫操作框的内容,该内容应显示在另一个网站,WebsiteA以及更多不使用iframe选择我们的解决方案的网站上.

如何使用jQuery或AngularJS创建该,没有冲突,不知道客户在他们的网页中有什么,他们只是导入我们的some_script.js设置一些设置就是这样.最重要的是,我们不能搞砸顾客方面(显然),客户使用的技术也不应该搞乱我们的超级盒子.

我很想看到一个有效的例子.这很难(我认为),所以如果你没有解决这个问题,请在回答之前花些更多时间思考.感谢帮助人!

Dav*_*ich 6

RequireJS允许您创建可消耗的JQuery/AngularJS应用程序(AMD),而无需担心版本冲突

RequireJS不是担心库noconflict's,而是在AMD的全局范围之外创建一个单独的沙箱/变量范围.在AMD内部,只提供包含的版本.

AMD -异步模块定义是自封闭的应用程序,具有自己的库范围.Self-Encolsure就像命名空间,完全没有冲突.有关使用模块的详细说明,请参阅 WHY WEB MODULES.

一个AngularJS示例,创建一个AngularMain.js文件:

require.config({
    baseUrl: "js",    
    paths: {
       'angular': '//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min',
       'angularAMD': 'lib/angularAMD.min',
       'ngload': 'lib/ngload.min'
    },
    shim: { 'angularAMD': ['angular'], 'angular-route': ['angular'] },
    deps: ['AngularApp']
});
Run Code Online (Sandbox Code Playgroud)

现在,require.config已经表明还应该包含AngularApp.js(正如您将看到的,RequireJS通常假设".js"扩展名),具有angular.jsangular-route.js的依赖

现在,您可以在文件中使用RequireJSAngularJS语法的组合来定义Angular App和Controllers AngularApp.js:

define(['angularAMD', 'angular-route'], function (angularAMD) {
    var app = angular.module("webapp", ['ngRoute']);
    app.config(function ($routeProvider) {
        $routeProvider.when("/home", angularAMD.route({
            templateUrl: 'views/home.html', controller: 'HomeCtrl',
            controllerUrl: 'ctrl/home'
        }))
    });
    return angularAMD.bootstrap(app);
});

define(['app'], function (app) {
    app.controller('HomeCtrl', function ($scope) {
        $scope.message = "Message from HomeCtrl"; 
    });
});
Run Code Online (Sandbox Code Playgroud)

最后:您的HTML页面请求引用您的应用程序,引用require.js和data-main指示应用程序文件的属性.

<script data-main="js/AngularMain" src=".../require.js"></script>
Run Code Online (Sandbox Code Playgroud)

再一次: ".js"文件扩展名是可选的


  • @DaveA - 我认为另一种改写GuyT问题的方法是,如果网站已经使用了针对`define`的不同足迹的依赖加载器,或者不同版本的requirejs,或者稍后加载并覆盖`define`的另一个脚本,该怎么办? ? (3认同)