Google code-prettify 代码突出显示不适用于 Polymer 3

Google code-prettify Code highlighting not working for Polymer 3

如何在 Polymer 3 中使用 Google code-prettify?

语法突出显示不起作用。 示例代码如下:

class MyView1 extends PolymerElement {
    static get template() {
        return html` 
      <style include="shared-styles">

 </style>

       <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>

                <pre class="prettyprint">
                    <code class="language-java">
                        public static void getValue(){

                            String name = "Vikram";
                        }




                    </code>
                </pre>

我在 https://stackblitz.com/edit/polymer-element-example-d7n14q 和 运行 添加了一个可以编辑代码的工作示例。

你有没有添加美化的style.css? https://cdn.rawgit.com/google/code-prettify/master/loader/prettify.css

此外,我会尝试将语言 class 放在前 class 属性中。 (也使用 lang 而不是 language)

如果它给它着色但没有像你期望的那样,你可以尝试将 lang 作为 get 参数发送: https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?lang=java

此库以旧方式工作,不能很好地与 ShadowDom 配合使用。相反,您应该使用像 Highlight.js 这样的库,它可以作为模块使用。在 polymer 3 中,首先使用您的特定语言导入库

import hljs from 'highlight.js/lib/highlight';
import java from 'highlight.js/lib/languages/java';
hljs.registerLanguage('java', java);

然后使用

突出显示您的元素
hljs.highlightBlock(this.$.code);

这里是一个工作示例:https://stackblitz.com/edit/polymer-element-example-tthbbn

看起来你有一个使用突出显示的解决方案,但要解释发生了什么:

run_prettify.js 在加载时美化 DOM 中的所有内容。

它不会递归到影子 DOMs 中,也不会美化加载后添加的内容。

您可以通过显式调用 prettyPrintOne post 渲染来解决这两个问题,也许通过 Polymer.RenderStatus.afterNextRender 渲染,尽管我不知道它如何与 lithtml 交互。