是否可以获取一个巨大的字符串并通过 URL 路径将其加载为 JavaScript?

Is it possible to take a giant string and load it through a URL path as JavaScript?

我试图通过使用 OCLazyLoad 仅加载用户请求的页面来简化无限大的单页 AngularJS Web 应用程序。我想通过 WebSocket 而不是 HTTP 延迟加载 HTML、JS 和 CSS。

我想要 WebSockets 的原因是因为所有网络浏览器都不对域名强制执行任何类型的 COR,因此可以像这样进行缩放:

ws://worker01/AccountManagementHTMLs

ws://worker02/ForumCSS

等...

我想要这种缩放,因为它可能已经通过原始 Base64 块中的流式传输文件来帮助一个浏览器到另一个浏览器之间的点对点文件传输。

使用 raspberry 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 的路径一样文件?

My DynamicHTMLInjector 和 DynamicJavaScriptInjector 不指向文件系统路径,我只是在欺骗 JavaScript 假设它正在加载静态文件。

我刚好有类似的功能需要,它会让用户在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);
}