在我们的应用程序中,我们生成两个 URL,许多用户希望将其复制并粘贴到 gmail 中。我们决定创建 HTML 代码,使链接看起来比长 URL 更好。我们在应用程序中添加了一个功能,将 HTML 放置在 Windows 剪贴板上,以便他们可以将其直接粘贴到 Gmail 撰写窗口中。
但是,当我们将其粘贴到 Gmail 中时,它会显示为原始 html 文本。我们搜索了解决方案,大多数似乎建议在 Chrome 中查看 html,然后将结果复制到剪贴板并粘贴到 Gmail 中。 参见这篇文章我们用源 HTML 尝试了这一点,它运行得很好,但显然对于我们的应用程序来说这不是一个好的解决方案。
有没有一种方法可以将 HTML 代码直接写入/编码到剪贴板,以便与 gmail 兼容?
我知道这是一篇旧文章,但它可能会对某人有所帮助。 我尝试的是打印剪贴板上实际的内容,然后粘贴到 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();
}
}