【发布时间】:2015-12-10 00:39:09
【问题描述】:
我想知道这个问题是否真的没有单一的实用解决方案。即交换网页的html内容。
在这种情况下,jquery's load() 没有用,因为我必须为 Node-webkit 加载文件本地,这不起作用,因为Cross origin requests 不是允许在铬上。 而且我不会仅仅为了加载本地 html 而创建一个令人讨厌的 localhost 网络服务器。
基本上我的问题是,如果我链接到菜单栏中的其他 html 文件,整个 javascript 也会重新加载,这使得无法在后台不中断地保持进程运行。如果 Html 页面重新加载 包括 Javascript 文件在内的所有内容都重新加载。 杀死 Node-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>
所以我可以把所有东西都放在一个字符串中,然后做
document.body.innerHTML = "<p>whatever</p>”;
但这并不实用,因为没有很好的方法将所有内容放在一行中。将所有内容编码到一行中也可能会意外出错。一大串 html 是不可避免的。
document.body.innerHTML = "<p class="p">If this happens it will break</p>";
多行字符串也不是一个好的选择
var str = "Javascript \
multi-line \
strings \
are \
awful";
没有简单的方法可以将您的代码复制粘贴到其中,并且此代码可能会因为任何转义字符后的一个空格而中断。也许串联?
var a = "hey man, this is on a line\n" +
"and this is on another\n" +
"and this is on a third";
祝你好运,像这样手动连接你的 300 行 html 文件。 至少there is a better way to do this in ES6.
也许我可以使用 node-htmlparser 之类的东西并读取/解析整个文件。但仍然存在将整个文件放入 DOM 的问题。
fs.createReadStream('./path_to_file.html').pipe(parser);
是否没有简单、标准的纯 JavaScript 方式来在本地交换内容而无需疯狂的黑客攻击或外部库?网络不是为此而设计的吗?在这些日子里,Electron 和 NW 等工具在桌面应用程序开发中变得越来越流行,难道不需要为此实施一些解决方案吗?
【问题讨论】:
标签: javascript node.js html node-webkit electron