是否可以采用一个巨大的字符串并通过URL路径加载它作为JavaScript?

时间:2018-02-25 08:44:29

标签: javascript html angularjs oclazyload

我试图通过使用OCLazyLoad只加载用户请求的页面来轻松拥有一个无限大的单页面AngularJS Web应用程序。我想通过WebSocket而不是HTTP懒洋洋地加载HTML,JS和CSS。

我之所以想要WebSockets,是因为所有的网络浏览器都没有在域名上强制执行任何类型的COR,因此可以像以下那样进行扩展:

ws://worker01/AccountManagementHTMLs

ws://worker02/ForumCSS

等...

我希望进行这种扩展,因为它可能已经通过原始Base64块中的流文件帮助在一个浏览器之间进行对等文件传输。

还有使用覆盆子pis运行ubuntu作为廉价但功能强大的工作无人机的优势。

但在我开始研究那些实验性功能之前,将字符串加载到OCLazyLoad中会很酷。但是如果你看看我的Controller.js,OCLazyLoad只能从URL加载JS:

http://localhost/krogoth_gantry/DynamicJavaScriptInjector/ MODULE.JS

(function() {
    'use strict';
    angular.module('app.FUSE_APP_NAME', ['flow']).config(config);

    function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {
        $stateProvider
            .state('app.FUSE_APP_NAME', {
                url: '/FUSE_APP_NAME',
                views: {
                    'content@app': {
                        templateUrl: '/krogoth_gantry/DynamicHTMLInjector/?name=FUSE_APP_NAME',
                        controller: 'FUSE_APP_NAMEController as vm'
                    }
                }
            })
        _DJANGULAR_SLAVE_VC_INJECTION_POINT_; /* krogoth_gantry Slave VCs automatically injected here. */
        _DJANGULAR_SLAVE_MSAPI_INJECTION_POINT_
        msNavigationServiceProvider.saveItem('AK_NAVCAT_KROGOTH.AK_SUBCATAGORY_KROGOTH.FUSE_APP_NAME', {
            title: 'FUSE_APP_TITLE',
            icon: 'FUSE_APP_ICON',
            state: 'app.FUSE_APP_NAME',
            weight: 3
        });
        _DJANGULAR_SLAVE_NAV_SERVICE_INJECTIONS_
    }
})();

http://localhost/krogoth_gantry/DynamicJavaScriptInjector/ CONTROLLER.JS

(function() {
    'use strict';
    angular.module('app.FUSE_APP_NAME').controller('FUSE_APP_NAMEController', FUSE_APP_NAMEController);

    function FUSE_APP_NAMEController($log, $state, $ocLazyLoad) {
        var vm = this;
        vm.$onInit = onInit;
        vm.viewName = 'FUSE_APP_NAME';
        vm.viewDidLoad = viewDidLoad;

        vm.initLazyModule = initLazyModule;
        vm.stateGoToLazy = stateGoToLazy;

        function onInit() {
            console.log('FUSE_APP_NAME did finish loading');
            vm.viewDidLoad();
        }

        function viewDidLoad() {
            $('<p>Welcome.</p><br>').appendTo('ak-main');
        }

        function btnClickInitLazyModule() {
            $ocLazyLoad.load('/krogoth_gantry/DynamicJavaScriptInjector/?name=LAZYMVC_UNLOADED&ov=file.js');
        }

        function stateGoToLazy() {
            $state.go("app.LAZYMVC_UNLOADED");
        }
    }
})();


// Name:
// LAZYMVC_THING

// We will load: LAZYMVC_UNLOADED

// COMPILED HTML:
////krogoth_gantry/DynamicHTMLInjector/?name=FUSE_APP_NAME

// COMPILED JAVASCRIPT:
////krogoth_gantry/DynamicJavaScriptInjector/?name=FUSE_APP_NAME

OCLazyLoad似乎需要一个URL来加载其他AngularJS模块,有没有办法简单地加载原始字符串,就像它是JS或HTML文件的路径一样?

我的DynamicHTMLInjector和DynamicJavaScriptInjector没有指向文件系统路径,我只是简单地欺骗JavaScript来假设它正在加载静态文件。

1 个答案:

答案 0 :(得分:1)

我碰巧需要类似的功能,它会让用户在textarea中编写js,然后运行这个js。

脚本将在您

后运行
document.body.appendChild(newScript);




function run() {
    var el = document.getElementById('cnsl');
    var scriptText = el.value;
    var oldScript = document.getElementById('scriptContainer');
    var newScript;

    if (oldScript) {
        oldScript.parentNode.removeChild(oldScript);
    }

    newScript = document.createElement('script');
    newScript.id = 'scriptContainer';
    newScript.text = el.value;
    document.body.appendChild(newScript);
}