【问题标题】:javascript (applescript) : find text and highlightjavascript (applescript) : 查找文本并突出显示
【发布时间】:2019-04-29 19:15:57
【问题描述】:

我正在尝试查找某些文本的每个实例并在 safari 中突出显示它们,无论它们是什么标签。

这是目前为止的代码:

set myList to {"ask", "yesterday", "more random e.g"}
try
    tell application "Safari"
        do JavaScript "document.designMode = 'on';" in tab 1 of window 1


        repeat with thisText in myList
            do JavaScript "var sel = window.getSelection();
                    sel.collapse(document.body, 0);
                    while (window.find('" & thisText & "', true)) {document.execCommand('HiliteColor', false, '#5cdf64');}
                    sel.collapseToEnd()" in tab 1 of window 1
        end repeat
        do JavaScript "document.designMode = 'off';" in tab 1 of window 1

    end tell
on error
    --
end try

此代码的问题:

  • 页面将在脚本运行时上下滚动
  • 这不会搜索每个标签
  • 如果我点击了不起作用的链接/页面刷新(我想我可以使用重复,但我会遇到烦人的滚动问题)
  • 如果可能的话,我希望一个变量的每个实例都具有相同的颜色,然后另一个变量的颜色不同...

【问题讨论】:

    标签: javascript text safari applescript


    【解决方案1】:

    您可以像这样创建一个循环来处理最前面窗口中的所有选项卡:

    set myList to {{"ask","#5cdf64"}, {"yesterday", "#FFFF00"}, {"more random e.g", "#FF0000"}}
    tell application "Safari"
        activate
        set theWindow to front window
        tell theWindow
            set tabCount to count of tabs
            repeat with tabIndex from 1 to tabCount
                set current tab to tab tabIndex
                    tell current tab
                        repeat with colourPair in myList
                            do JavaScript "document.designMode = 'on'"
                            do JavaScript "var sel = window.getSelection(); sel.collapse(document.body, 0); while (window.find('" & (item 1 of colourPair) & "', true)) {document.execCommand('HiliteColor', false, '" & (item 2 of colourPair) & "');}"
                            do JavaScript "document.designMode = 'off'"
                        end repeat
                    end tell
            end repeat
        end tell
    end tell
    

    然后,您的 JavaScript 将指向正确的选项卡,而无需硬编码对窗口和选项卡的引用。

    您为 myList 中的每个实例分配不同颜色的要求由带有搜索词和颜色代码对的“列表列表”处理。

    我认为滚动与sel.collapseToEnd() 有关,我认为您不需要。

    【讨论】:

    • 很好,谢谢,如果我删除了 sel.collapse,这不会突出显示所有文本(页面下方),但是如果我留在脚本上,则会导致页面不断向下和向上滚动
    • 当我在多个选项卡上运行脚本时,每个选项卡都有多个搜索词出现,每个选项卡都在没有 sel.collapse 的情况下突出显示 - 而且它不会滚动。
    • 很遗憾我现在无法测试,但我会尽快尝试,再次感谢您的帮助
    • 这是一种无需关注每个标签的方式吗?
    • 好的,所以我改变了everytab,所以它只突出了重点标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2012-09-30
    • 1970-01-01
    • 2019-03-15
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多