我正在尝试创建降价编辑器。
到目前为止:我已经加载了index
页面。我正在使用fs.readdir
获取所有降价文件的标题并将其显示在边栏中。然后,单击这些标题#content
即可得到内容。
module.exports = (win) => {
fs.readdir( './data', (err, data) =>{
data.map(title => {
if(title.split('.md').length==2){
el = document.createElement("li"); // get gave it the title ..
el.addEventListener('click', function(e){
fs.readFile(`./data/${title}`, (err, data) => {
document.getElementById('content').innerHTML = data;
});
})
document.getElementById('titles').appendChild(el) // title are on the page
问题是当我介绍另一个页面时
我有一个偏好设置页面
win.loadURL(path.join('file://', __dirname, '../static/preferences.html'))
它具有相同的侧边栏,因此我导入了相同的代码来获取标题。但是现在,当我单击链接之一时,我不需要document.getElementById('content').innerHTML = data;
,而是要加载index
页面然后注入内容
到目前为止,我已经尝试过
const checkPageState = (pageName, callback) => {
if(pageName === "preferences"){
ipcRenderer.send(GO_TO_PAGE, 'index')
}
setTimeout(callback(), 1000);
}
...
el.addEventListener('click', function(e){
checkPageState(win, ()=>{
fs.readFile(`./data/${title}`, (err, data) => {
if (err) throw err;
fileDir = `./data/${title}`;
document.getElementById('content').innerHTML = data;
});
})
})
我的想法是,ipcRenderer.send(GO_TO_PAGE, 'index')
会在稍等片刻后加载索引页(这样做),然后将数据注入到index
页中。不是!
我该怎么做?
答案 0 :(得分:1)
我最近也尝试执行此操作,这有点棘手,但是我发现了一些可行的方法:
在电子中,当它尝试转到另一页时,我用以下命令阻止了它的进入:
win.webContents.on('will-navigate', function (evt, url) {
evt.preventDefault();
win.webContents.executeJavaScript('makeHiddenPageIframe("' + url + '");');
});
然后它调用页面上定义的makeHiddenPageIframe
函数。
然后在页面中定义makeHiddenPageIframe
函数:
function makeHiddenPageIframe (url) {
var hiddenPage = document.createElement("iframe");
hiddenPage.setAttribute("src", url);
hiddenPage.style.display = 'none';
document.body.appendChild(hiddenPage);
hiddenPage.onload = function () {
var frameDocument = hiddenPage.document;
if (hiddenPage.contentDocument) {
frameDocument = hiddenPage.contentDocument;
} else if (hiddenPage.contentWindow) {
frameDocument = hiddenPage.contentWindow.document;
}
document.open();
document.write(frameDocument.documentElement.innerHTML);
document.close();
window.history.pushState("", document.title, url.replace('https://' + window.location.hostname, ''));
}
}
然后创建一个iframe并在其中加载页面,然后在该页面加载后将所有html从iframe复制到父窗口,这样切换就好像立即发生了。
另外,底部的window.history.pushState
是当您覆盖html时,URL保持不变,因此当您重新加载html时,它返回到原始页面,但是window.history.pushState
更改了url而没有重新加载页面
任何形式的导航都会加载iframe,因此您可以保留win.loadURL(
转到另一个降价页面。
The 'will-navigate'
event docs.
我希望这会有所帮助:)