在Electron中搜索页面?

时间:2017-07-02 20:02:23

标签: javascript reactjs electron

我目前正在设计Electron的程序。该计划的关键部分之一是搜索选项。与其他网站类似,您可以在整个网站上搜索与您的查询相符的网页,我想在我的程序的“页面”/“html文件”中搜索,并让它显示搜索结果。优选地,一次显示一个字母,因此可以在键入时看到结果,但即使是搜索选项也可以。我只需要在我的程序页面内搜索,而不是在外部站点中搜索。我无法弄清楚如何开始实现这一点,因为Electron不支持PHP。我知道反应可以一次实时搜索,但我不知道如何搜索其他页面或如何解析它们进行搜索。任何使我走上正确轨道的建议,指南或框架都会有所帮助。谢谢!

编辑:我也知道webcontents.findInPage()函数,但它只搜索当前页面,而不是项目路径中的其他页面。如果我能找到实际搜索它们的方法,我可以手动搜索哪些页面。

1 个答案:

答案 0 :(得分:0)

如果将所有页面存储在“视图”之类的目录中,则可以使用fs读取每个文件并搜索其内容。

我已经快速举例说明了你可以做的事情:

// The directory containing all your pages
let directoryToYourPagesOrHTMLFiles = "/your/directory/";

// Require fs so you can get all the files and file content
const fs = require("fs");

// Require html-to-text so you can parse the HTML in the files
// into text so you can search on the data easier
let htmlToText = require('html-to-text'); // npm install --save html-to-text

// Run this function when a user enters a character
function userTyped(inputValue) {
    // Foreach file in the directory
    fs.readdir(directoryToYourPagesOrHTMLFiles).forEach(filename => {
        // Read the file contents
        fs.readFile(directoryToYourPagesOrHTMLFiles + "/" + filename, "utf8", (err, data) => {
            // If there was an error reading the file log it
            if(err) {
                console.log(err);
            } else {
                // If there was no error, parse the HTML into text
                let text = htmlToText.fromString(data);

                // Perform your search on the next using the inputValue

                // Example Search:
                if(text.indexOf(inputValue) > -1) {
                    // Display the page in your search results
                    displaySearchResult(directoryToYourPagesOrHTMLFiles + "/" + filename);
                }
            }
        });
    });
}


function displaySearchResult(pagePath) {
    /*
        Add the page to a results page
     */
}

我没有对此进行测试,因为它匆忙地完成了它,但它显示了你需要做的概念!

希望这能帮到你!