【问题标题】:How to highlight all the occurrence of a particular string in a web page?如何突出显示网页中特定字符串的所有出现?
【发布时间】:2015-09-01 00:20:55
【问题描述】:

我正在编写一个摇摆应用程序。在这个应用程序中有一个带有一些 HTTP 链接的表。当我单击一行时,会打开一个新的浏览器窗口。至此,一切正常。

现在我想知道是否可以突出显示特定字符​​串的所有出现(当新页面打开时)。 在实践中,如何以编程方式实现类似于“查找”和“突出显示”的功能。

您能否给我一个起点,以便我可以开始研究这个新功能?

【问题讨论】:

  • “现在我想知道是否可以突出显示特定字符​​串的所有出现(当新页面打开时)。” 仅当您控制网页或显示它的浏览器。
  • @andrew,我在我的 Swing 应用程序中嵌入了一个实现 Swing 浏览器的类;然后我向这个类添加了一个实现'executeScript'的方法并且它可以工作。谢谢阿尔伯

标签: java html string swing


【解决方案1】:

为了解决我的问题,

  1. 我首先在我的 Swing 应用程序中添加了一个实现 Swing 浏览器的类。我刚刚从 Oracle 复制了代码: http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm

  2. 然后我把这个类的调用放到一个监听器中:

    .addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            String urlto = jTextField8.getText();
            String o = (String)jTable2.getModel().getValueAt(selectedRow, 1);
            String urltoencode = (urlto+"?find="+o); 
            SimpleSwingBrowser browser = new SimpleSwingBrowser(); 
            browser.setVisible(true);
            browser.loadURL(urltoencode);
    
  3. 最后,我修改了 Swing 浏览器类; 我刚刚添加了一些要在嵌入式浏览器打开的新页面上执行的 java 脚本:

    engine.getLoadWorker().stateProperty().addListener(
            new ChangeListener<State>() {
            @Override
            public void changed(ObservableValue ov, State oldState, State newState) {
                if (newState == State.SUCCEEDED) {
                    engine.executeScript(
       "var myParam = location.search.split('find=')[1];"
     + "doSearch(myParam);function doSearch(text) {\n" +
       "        if (window.find && window.getSelection) {\n" +
       "        document.designMode = \"on\";\n" +
       "        var sel = window.getSelection();\n" +
       "        sel.collapse(document.body, 0);\n" +
       "\n" +
       "        while (window.find(text)) {\n" +
       "            document.execCommand(\"HiliteColor\", false, \"yellow\");\n" +
       "            sel.collapseToEnd();\n" +
       "        }\n" +
       "        document.designMode = \"off\";\n" +
       "    } else if (document.body.createTextRange) {\n" +
       "        var textRange = document.body.createTextRange();\n" +
       "        while (textRange.findText(text)) {\n" +
       "            textRange.execCommand(\"BackColor\", false, \"yellow\");\n" +
       "            textRange.collapse(false);\n" +
       "        }\n" +
       "    }\n" +
       "}");
                }
            }
        });
    

【讨论】:

  • 到目前为止一切顺利,但在此解决方案中,搜索到的单词被编码到 java 脚本函数中。接下来我想传递要从 Javafx 应用程序搜索的字符串。但可能......这是另一个问题
  • 向 URL 添加参数。例如。而不是http://my.com/index.html 使用http://my.com/index.html?find=string。然后,您需要获取 URL,将其分解并发现用于搜索的字符串。
  • “这是另一个问题” 是的。 ;)
  • 有意思,我去试试!!
  • “为什么当我关闭浏览器(在新窗口中打开)时,swing 应用程序也会关闭?” 最好在新问题上提出,但警告标志是(可能) 可以在JFrame.EXIT_ON_CLOSE .. 中找到;)
猜你喜欢
  • 2018-03-05
  • 2014-04-19
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2015-08-25
  • 2013-10-04
相关资源
最近更新 更多