Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试了解如何使用createTextNode创建链接_Javascript_Html_Javafx_Webview_Javafx 11 - Fatal编程技术网

Javascript 尝试了解如何使用createTextNode创建链接

Javascript 尝试了解如何使用createTextNode创建链接,javascript,html,javafx,webview,javafx-11,Javascript,Html,Javafx,Webview,Javafx 11,首先,我想说,最初创建这部分代码的人已经不在团队中了 我们正在创建一个开发工具来管理和开发游戏服务器,它有自己的编程语言 我正在使用JavaFX和WebView来生成开发工具的聊天区域,以便与其他开发人员和工作人员进行通信。然而,我想要它,所以当你发布一个链接时,它实际上显示为一个链接,而不是纯文本。我尝试过自动链接器之类的东西,但没有成功。这是webview的HTML部分 <script src=".././scripts/Autolinker.js"><

首先,我想说,最初创建这部分代码的人已经不在团队中了

我们正在创建一个开发工具来管理和开发游戏服务器,它有自己的编程语言

我正在使用JavaFX和WebView来生成开发工具的聊天区域,以便与其他开发人员和工作人员进行通信。然而,我想要它,所以当你发布一个链接时,它实际上显示为一个链接,而不是纯文本。我尝试过自动链接器之类的东西,但没有成功。这是webview的HTML部分

<script src=".././scripts/Autolinker.js"></script>
<script type="text/javascript">
  app = null;
  const messages = document.getElementById("messages");

  function addMessage(message, options) {
    const p = document.createElement("p");
    const c = message.indexOf(":");
    const modifiedMessage = message; //replaceURLWithHTMLLinks(message);
    const ridBrackets = options.replace(/[\[\]']/g, "");
    const tokenize = ridBrackets.split(",", 2);
    const rcChatOptions = tokenize;
    const mFontColor = tokenize[rcChatOptions.BFONTCOLOR];
    let timeStampFormat = tokenize[rcChatOptions.TIMESTAMP];
    if(c > -1) {
      const u = document.createElement("span");
      const a = document.createElement("a");
      u.className = "user";
      if(mFontColor != null) {
        u.style.color = mFontColor;
      } else {
        u.style.color = "#00c02b";
      }
      //Turn plain text links into actual links
      u.appendChild(document.createTextNode(Autolinker.link(modifiedMessage.substring(0, c + 1))));
      p.appendChild(u);
      if(document.selectedfont != null) {
        p.style.fontFamily = document.selectedfont;
      }
      p.appendChild(document.createTextNode(modifiedMessage.substring(c + 1)));
    } else {
      p.appendChild(document.createTextNode(modifiedMessage));
    }
    // Append message and scroll to bottom (if at bottom)
    const scrollTop = document.body.scrollTop;
    const scrolledToBottom = scrollTop + window.innerHeight >= document.body.scrollHeight;
    if(scrolledToBottom) {
      messages.appendChild(p);
      window.scrollTo(document.body.scrollLeft, document.body.scrollHeight - window.innerHeight);
    } else {
      messages.appendChild(p);
    }
    messages.style.backgroundColor = "transparent";
  }
  
</script>


app=null;
const messages=document.getElementById(“消息”);
函数addMessage(消息、选项){
const p=document.createElement(“p”);
const c=message.indexOf(“:”);
const modifiedMessage=message;//replaceurlwithhtmlinks(message);
const rid方括号=options.replace(/[\[\]']/g,”);
const-tokenize=rid方括号.split(“,”,2);
const rcchatpoptions=标记化;
const mFontColor=tokenize[rcChatOptions.BFONTCOLOR];
让timeStampFormat=tokenize[rcChatOptions.TIMESTAMP];
如果(c>-1){
const u=document.createElement(“span”);
常量a=document.createElement(“a”);
u、 className=“用户”;
if(mFontColor!=null){
u、 style.color=mFontColor;
}否则{
u、 style.color=“#00c02b”;
}
//将纯文本链接转换为实际链接
u、 appendChild(document.createTextNode(Autolinker.link(modifiedMessage.substring(0,c+1)));
p、 儿童(u);
如果(document.selectedfont!=null){
p、 style.fontFamily=document.selectedfont;
}
p、 appendChild(document.createTextNode(modifiedMessage.substring(c+1));
}否则{
p、 appendChild(document.createTextNode(modifiedMessage));
}
//追加消息并滚动到底部(如果在底部)
const scrollTop=document.body.scrollTop;
常量scrolledToBottom=scrollTop+window.innerHeight>=document.body.scrollHeight;
如果(滚动到工具栏){
儿童(p);
scrollTo(document.body.scrollLeft,document.body.scrollHeight-window.innerHeight);
}否则{
儿童(p);
}
messages.style.backgroundColor=“透明”;
}
我删除了我觉得只是分散注意力的部分代码

这就是工具的外观

这就是使用AutoLinker时的样子


(因此,自动链接器正在完成它的工作,只是它仍然没有呈现为超链接)

看起来TextNode是在收集了一些子字符串(即链接)后创建的。下面是一个例子,说明了如果直接在js中创建链接,然后将其传递给TextNode,会是什么样子。
您可以做的一件事是将文本放置在段落内的标记内,然后进行如下转换:

var link = document.createElement('link');
link.innerHTML = 'Website: <a href="http://somelink.com" </a>
link.href = 'http://somelink.com';
link.appendChild(document.createTextNode('http://somelink.com'));

var link=document.createElement('link');

link.innerHTML='Website:在找到正确的方向(由Frank,谢谢)后,我发现了一个javascript库,它帮助我完成了我想要的东西

图书馆

这里有一个例子

用法:

saferInnerHTML(message, modifiedMessage, true);
最后一个参数是一个选项,追加或覆盖


显然,我必须做一些CSS工作,使它们不显示为按钮。但这正是我想要实现的。

DOM TextNodes只接受文本。因此,问题不在于Autolinker,而在于您处理的是纯文本DOM节点。您需要创建
标记,并将url放入锚定标记的
href
属性中。虽然这让我找到了正确的方向,但如何做一些更复杂的事情呢。假设我的文本是“Carlito:random text www.test.com”一些更随机的测试www.test2.com(在一个句子中有多个链接)