如何将html放在可以粘贴到gmail的剪贴板上

问题描述 投票:0回答:1

在我们的应用程序中,我们生成两个 URL,许多用户希望将其复制并粘贴到 gmail 中。我们决定创建 HTML 代码,使链接看起来比长 URL 更好。我们在应用程序中添加了一个功能,将 HTML 放置在 Windows 剪贴板上,以便他们可以将其直接粘贴到 Gmail 撰写窗口中。

但是,当我们将其粘贴到 Gmail 中时,它会显示为原始 html 文本。我们搜索了解决方案,大多数似乎建议在 Chrome 中查看 html,然后将结果复制到剪贴板并粘贴到 Gmail 中。 参见这篇文章我们用源 HTML 尝试了这一点,它运行得很好,但显然对于我们的应用程序来说这不是一个好的解决方案。

有没有一种方法可以将 HTML 代码直接写入/编码到剪贴板,以便与 gmail 兼容?

html gmail
1个回答
0
投票

我知道这是一篇旧文章,但它可能会对某人有所帮助。 我尝试的是打印剪贴板上实际的内容,然后粘贴到 gmail 上以检查里面的内容。然后我意识到 gmail 仅在数据使用剪贴板的 html 风格时才读取。然后我想出了这个,用 htmlflavor 将 hmtl 设置到剪贴板。

重要提示: html 必须位于这些

startfragment
endfragment
标签之间,否则 Gmail 不会将其视为 html。

public class SetClipboard  implements ClipboardOwner{

    public SetClipboard() {
        String simpleTable = """
                             <html>
                             <!--StartFragment-->

                             <table>
                               <tr>
                                 <th>COLUMN 1</th>
                                 <th>COLUMN 2</th>
                               </tr>
                               <tr>
                                 <td>ABC</td>
                                 <td>CDE</td>
                               </tr>
                             </table>

                             <!--EndFragment-->
                             </html>
                             """;
        Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
        c.setContents(new TransferableHTML(simpleTable), this);
    }

    @Override
    public void lostOwnership(Clipboard clipboard, Transferable contents) {

    }

    private static class TransferableHTML implements Transferable {

        String html;
        public TransferableHTML( String html ) {
            this.html = html;
        }

        public Object getTransferData( DataFlavor flavor )
        throws UnsupportedFlavorException, IOException {
            if ( flavor.equals( DataFlavor.allHtmlFlavor ) && html != null ) {
                return html;
            }
            else {
                throw new UnsupportedFlavorException( flavor );
            }
        }

        public DataFlavor[] getTransferDataFlavors() {
            DataFlavor[] flavors = new DataFlavor[ 1 ];
            flavors[ 0 ] = DataFlavor.allHtmlFlavor;
            return flavors;
        }

        public boolean isDataFlavorSupported( DataFlavor flavor ) {
            DataFlavor[] flavors = getTransferDataFlavors();
            for ( int i = 0; i < flavors.length; i++ ) {
                if ( flavor.equals( flavors[ i ] ) ) {
                    return true;
                }
            }
            return false;
        }
    }

    public static void main(String[] args) {
        new SetClipboard();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.