Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
交换javascript中的页面内容。为什么不是';没有解决办法吗?_Javascript_Node.js_Html_Node Webkit_Electron - Fatal编程技术网

交换javascript中的页面内容。为什么不是';没有解决办法吗?

交换javascript中的页面内容。为什么不是';没有解决办法吗?,javascript,node.js,html,node-webkit,electron,Javascript,Node.js,Html,Node Webkit,Electron,我想知道这个问题是否真的没有一个实用的解决方案。即,交换网页的html内容 在这种情况下是没有用的,因为我必须为节点webkit本地加载文件,该文件不工作,因为在chrome上是不允许的。 我不会仅仅为了加载一段本地html而创建一个该死的本地主机Web服务器 基本上,我的问题是,如果我链接到菜单栏中的其他html文件,整个javascript也会重新加载,这使得进程无法在后台不中断地运行。如果Html页面重新加载包括Javascript文件在内的所有内容,请重新加载。终止节点webkit No

我想知道这个问题是否真的没有一个实用的解决方案。即,交换网页的html内容

在这种情况下是没有用的,因为我必须为节点webkit本地加载文件,该文件不工作,因为在chrome上是不允许的。 我不会仅仅为了加载一段本地html而创建一个该死的本地主机Web服务器

基本上,我的问题是,如果我链接到菜单栏中的其他html文件,整个javascript也会重新加载,这使得进程无法在后台不中断地运行。如果Html页面重新加载包括Javascript文件在内的所有内容,请重新加载。终止节点webkit Node Js等的当前进程

这里有一段代码来说明我不想做什么

<html>
<head>
    <script>
    setInterval(function() {
        console.log("this task can't be interrupted!");
    }, 3000);
    </script>
    <script src="more_important_js_tasks_running_here.js"></script>
</head>
<body>
    <div id="menu">
        <ul class="pure-menu-list">
            <li><a href="file1.html">If I click here I will kill my javascript task 1</a></li>
            <li><a href="file2.html">If I click here I will kill my javascript task 2</a></li>
            <li><a href="file3.html">If I click here I will kill my javascript task 3</a></li>
        </ul>

        <div class="this is the content I would like to change.. maybe 100 lines of code or whatever">


        </div>
    </div>
</body>
</html>
没有简单的方法将代码复制粘贴到其中,并且由于任何转义字符后面有一个空格,此代码可能会中断。也许是连接

var a = "hey man, this is on a line\n" + 
        "and this is on another\n" +
        "and this is on a third";  
祝你好运,像这样手动连接300行html文件。 至少

也许我可以使用类似的方法读取/解析整个文件。。但是仍然有一个问题,那就是如何将整个片段放入DOM中

fs.createReadStream('./path_to_file.html').pipe(parser);

是否没有简单、标准的纯javascript方法可以在本地交换内容,而无需疯狂的黑客或外部库?web不是为此设计的吗?在桌面应用程序开发工具越来越流行的今天,是否需要为此实现一些解决方案?

我不熟悉在节点webkit中使用它,但我知道,如果加载文件://url,执行AJAX请求通常会导致一个错误。AJAX不是设计用于文件系统,而是设计用于网络,因此在应用程序中实现简单的web服务器可能是最简单的解决方案


另一种方法是创建一个“build”方法,将每个页面模板的内容插入到主模板中,然后加载该模板。这样,您就可以使用jQuery替换contentdiv的内容,一切都会好起来

我认为你在混合不同的东西

使用node.js时,您处于服务器端。这意味着您将向浏览器或其他应用程序发送一些内容,然后您将获得答案。为此,您正在定义事件。如果要从服务器向浏览器发送事件,必须在那里定义一些侦听器

如果您有一个网页,您还可以包含一些jQuery,浏览器将在客户端对其进行解释。如果您想更改html内容,当用户单击链接时,应该使用jQuery(在客户端)。使用jQuery,您还可以定义加载另一个页面的哪些元素

另一种方法,也可以与Electron一起使用,就是JSON文件。在这里,您可以定义更长的文本。您可以在浏览器中加载它们,也可以通过require通过node.js轻松导入它们。还可以使用一个JSON文件,该文件定义要加载的其他JSON文件


但你应该想想,电子应用程序是基于web技术的,但它不是本地web服务器或本地网页。因为您可以通过完全不同的html视图直接与node.js通信

如果文件是本地文件,并且包含HTML,则可以使用节点文件系统模块加载文件,然后将内容设置为DOM对象的内部HTML—无需外部库

我在下面扩展了你的例子。我已经使用了同步API,但是您也可以同样轻松地使用异步API。请注意,“页面加载”只出现一次,并且计时器继续在后台执行。确保文件与主页位于同一目录中

<html>
<head>
    <script>
    setInterval(function() {
        console.log("this task can't be interrupted!");
    }, 3000);

    function loadPage(fileName)
    {
        var fs = require('fs');
        fs.readFile(fileName, function (err, data)
        {
            if (err) throw err;
            console.log(data);

            document.getElementById("content").innerHTML = data;
        });
    }
    alert("Page loaded");
</script>
</head>
<body>
    <div id="menu">
        <ul>
            <li><a href="#" onclick="javascript:loadPage('page1.html')">Page 1</a></li>
            <li><a href="#" onclick="javascript:loadPage('page2.html')">Page 2</a></li>
        </ul>
        <div id="content" />
    </div>
</body>
</html>

setInterval(函数(){
log(“此任务无法中断!”);
}, 3000);
函数加载页(文件名)
{
var fs=需要('fs');
fs.readFile(文件名、函数(错误、数据)
{
如果(错误)抛出错误;
控制台日志(数据);
document.getElementById(“内容”).innerHTML=数据;
});
}
警报(“页面加载”);
<html>
<head>
    <script>
    setInterval(function() {
        console.log("this task can't be interrupted!");
    }, 3000);

    function loadPage(fileName)
    {
        var fs = require('fs');
        fs.readFile(fileName, function (err, data)
        {
            if (err) throw err;
            console.log(data);

            document.getElementById("content").innerHTML = data;
        });
    }
    alert("Page loaded");
</script>
</head>
<body>
    <div id="menu">
        <ul>
            <li><a href="#" onclick="javascript:loadPage('page1.html')">Page 1</a></li>
            <li><a href="#" onclick="javascript:loadPage('page2.html')">Page 2</a></li>
        </ul>
        <div id="content" />
    </div>
</body>
</html>