Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何使用electron throu文件正确加载我的angular应用程序://?_Angularjs_Electron - Fatal编程技术网

Angularjs 如何使用electron throu文件正确加载我的angular应用程序://?

Angularjs 如何使用electron throu文件正确加载我的angular应用程序://?,angularjs,electron,Angularjs,Electron,我有一个简单的Angular应用程序,它位于我项目的www文件夹中。当我通过http://server或虚拟主机运行它时,它在浏览器中工作正常。但是index.js将此作为文件加载 mainWindow.loadUrl('file://' + __dirname + '/www/index.html'); 所以当我双关电子时,它会显示一个空白窗口。我试图通过文件:///在Chrome浏览器中打开我的index.html,它也是空的。控制台中的错误 无法加载XMLHttpRequestfile

我有一个简单的Angular应用程序,它位于我项目的
www
文件夹中。当我通过http://server或虚拟主机运行它时,它在浏览器中工作正常。但是
index.js
将此作为文件加载

mainWindow.loadUrl('file://' + __dirname + '/www/index.html'); 
所以当我双关电子时,它会显示一个空白窗口。我试图通过文件:///在Chrome浏览器中打开我的
index.html
,它也是空的。控制台中的错误

无法加载XMLHttpRequestfile:///Users/Sergey/Sites/Electron-test/www/partials/layout.html. 跨源请求仅支持协议方案:http、数据、chrome、chrome扩展、https、chrome扩展资源。(匿名函数)@angular.js:10722

这是因为在路由器用户界面上

$stateProvider.state("app", {
    url: '/',
    templateUrl: 'partials/layout.html'
});
对于图像,还有一些其他相同的错误

我想有两种解决方法

  • 使用节点运行服务器并更改
    loadUrl('file:///...)
    to
    loadUrl('http:///...)
    但我不知道怎么做
  • 做点别的。可能是一些头或参数,以允许跨源请求,我不知道如何做到这一点

  • 我怎样才能解决这个问题呢?

    过了一段时间,我知道了怎么做,现在Electron构建了这个应用程序,它运行得非常完美。以下是electron消耗的整个
    index.js
    作为起点

    'use strict';
    var http = require('http');
    var path = require('path');
    var fs = require('fs');
    var app = require('app');
    var BrowserWindow = require('browser-window');
    
    require('crash-reporter').start();
    
    var mainWindow = null;
    
    app.on('window-all-closed', function() {
        if(process.platform != 'darwin') {
            app.quit();
        }
    });
    
    app.on('ready', function() {
        mainWindow = new BrowserWindow({
            width: 800,
            height: 600
        });
    
        var server = http.createServer(requestHandler).listen(9527);
    
        mainWindow.loadUrl('http://localhost:9527/index.html');
        mainWindow.webContents.on('did-finish-load', function() {
            mainWindow.setTitle(app.getName());
        });
        mainWindow.on('closed', function() {
            mainWindow = null;
            server.close();
        });
    });
    
    function requestHandler(req, res) {
        var
            file    = req.url == '/' ? '/index.html' : req.url,
            root    = __dirname + '/www',
            page404 = root + '/404.html';
    
        getFile((root + file), res, page404);
    };
    
    function getFile(filePath, res, page404) {
    
        fs.exists(filePath, function(exists) {
            if(exists) {
                fs.readFile(filePath, function(err, contents) {
                    if(!err) {
                        res.end(contents);
                    } else {
                        console.dir(err);
                    }
                });
            } else {
                fs.readFile(page404, function(err, contents) {
                    if(!err) {
                        res.writeHead(404, {'Content-Type': 'text/html'});
                        res.end(contents);
                    } else {
                        console.dir(err);
                    }
                });
            }
        });
    };
    

    这是一个起点。您只需更改
    root
    参数以指示您的
    index.html
    根文件夹。但我确信,如果您构建通用应用程序,它将是
    www

    您的两个选项相互关联,因为CORS是一种服务器配置,无法在
    文件上配置://
    。您应该真正研究如何部署服务器,因为在您的开发机器上复制您计划托管的环境通常是一种好的做法。若您计划在节点服务器上托管,那个么开发中的节点是好的(而且容易);如果您计划使用其他东西,比如PHP,那么如果可能的话,在您的开发环境中设置它。这是AngularJS SPA应用程序。它只加载静态JS/CSS/HTML文件。所有数据请求都是通过在线JSON API服务器完成的。所以我想任何服务器都可以工作,但这会启动一个http服务器,让本地网络甚至整个worldRight都可以访问该网站。这是起点。从这里你可以做任何事。您可以在应用程序中使用特殊tocken,并限制没有该令牌的任何人访问本地服务器。我的意思是,一旦你的应用程序运行起来,有很多方法可以解决这个问题。我注意到当人们把
    ?name=var
    查询字符串放入其中时,它不会加载文件。你打算如何使用它?你调用你的
    index.html?var=name
    ?什么是pзГзззыыыыыз,如何在HTML中获得它,在哪里使用它?