我有一个功能
function serializeUpgradeData(){
var workingFrame = document.querySelector('#upgradeFrame');
var iframeWrapper = document.createElement('div');
iframeWrapper.innerHTML = workingFrame.contentDocument.body.innerHTML;
var tableData = iframeWrapper.querySelectorAll('div > table:nth-child(2) > tbody > tr');
return tableData;
}
这会从使用此功能
添加到文档中的iframe中获取数据function loadFileAsFrame(fileName){
upgradeFrame.id ='upgradeFrame'
upgradeFrame.style.display = 'none';
document.body.appendChild(upgradeFrame);
upgradeFrame.src = fileName;
}
upgradeFrame
定义为document.createElement('iframe')
这两个都是从这个
运行的function openFileDialog(){
dialog.showOpenDialog({properties: ['openFile'], filters: [{name:'HTML', extensions:
['html', 'htm']}]}, function (fileName) {
loadFileAsFrame(fileName);
var table = serializeUpgradeData()
console.log(table);
});
}
文件只是我正在测试的html文档。第一次运行iframeWrapper只检索<div></div>
。如果我第二次使用相同的文件,它会检索我想要的数据。
注意:这也是一个电子应用
答案 0 :(得分:1)
我怀疑当没有&#39; upgradeFrame&#39;时,会调用serializeUpgradeData函数。然而,解决方案是使用回调或承诺,你的电话
function loadFileAsFrame(fileName ,callback){
upgradeFrame.id ='upgradeFrame'
upgradeFrame.style.display = 'none';
document.body.appendChild(upgradeFrame);
upgradeFrame.src = fileName;
callback(upgradeFrame)
}
然后使用它;
function openFileDialog(){
dialog.showOpenDialog({properties: ['openFile'], filters: [{name:'HTML', extensions:
['html', 'htm']}]}, function (fileName) {
loadFileAsFrame(fileName , function(upgradeFrame){
serializeUpgradeData(upgradeFrame);
});
});
}
终于
function serializeUpgradeData(upgradeFrame){
var workingFrame = upgradeFrame
var iframeWrapper = document.createElement('div');
iframeWrapper.innerHTML = workingFrame.contentDocument.body.innerHTML;
var tableData = iframeWrapper.querySelectorAll('div > table:nth-child(2) > tbody > tr');
return tableData;
}
现在还有另一种方法可以更轻松地完成你想做的事情 如果我理解正确,你想选择/选择一个html文件并将其显示在电子窗口中,为此你应该使用browserWindow创建一个新窗口,并将文件url作为入口点。它将提供更多控制,并减少编写代码。
希望这有帮助