<!DOCTYPE html>
    <html lang="vi" xmlns="https://www.w3.org/1999/xhtml" prefix="og: https://ogp.me/ns#">
    <head>
<title>JavaScript HTMLEditor chèn liên kết vào văn bản được chọn và mở với trình duyệt mặc</title>
<meta name="description" content="JavaScript HTMLEditor chèn liên kết vào văn bản được chọn và mở với trình duyệt mặc - Savefile - Tin Tức -...">
<meta name="author" content="DATAONLINE.IO.VN">
<meta name="copyright" content="DATAONLINE.IO.VN [support@dataonline.io.vn]">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="JavaScript HTMLEditor chèn liên kết vào văn bản được chọn và mở với trình duyệt mặc">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;365.io.vn&#x002F;savefile&#x002F;lap-trinh-huong-doi-tuong-oop&#x002F;javascript-htmleditor-chen-lien-ket-vao-van-ban-duoc-chon-va-mo-voi-trinh-duyet-mac-424.html">
<meta property="og:site_name" content="DATAONLINE.IO.VN">
<meta property="og:url" content="https://365.io.vn/savefile/lap-trinh-huong-doi-tuong-oop/javascript-htmleditor-chen-lien-ket-vao-van-ban-duoc-chon-va-mo-voi-trinh-duyet-mac-424.html">
<link rel="shortcut icon" href="https://365.io.vn/favicon.ico">
<link rel="canonical" href="https://365.io.vn/savefile/lap-trinh-huong-doi-tuong-oop/javascript-htmleditor-chen-lien-ket-vao-van-ban-duoc-chon-va-mo-voi-trinh-duyet-mac-424.html">
<link rel="alternate" href="https://365.io.vn/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tong-hop/" title="Tin Tức - Tổng hợp" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/gdpt/" title="Tin Tức - GDPT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/cac-van-ban/" title="Tin Tức - Các văn bản" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tieu-hoc/" title="Tin Tức - Tiểu học" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-3/" title="Tin Tức - Lớp 3" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-4/" title="Tin Tức - Lớp 4" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-5/" title="Tin Tức - Lớp 5" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/sgk-tieu-hoc/" title="Tin Tức - SGK Tiểu học" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-3/" title="Tin Tức - Tin học 3" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-4/" title="Tin Tức - Tin học 4" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-5/" title="Tin Tức - Tin học 5" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/thcs/" title="Tin Tức - THCS" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-6-75/" title="Tin Tức - Lớp 6" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-7-75/" title="Tin Tức - Lớp 7" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-8-75/" title="Tin Tức - Lớp 8" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-9-75/" title="Tin Tức - Lớp 9" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/sgk-thcs/" title="Tin Tức - SGK THCS" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-6/" title="Tin Tức - Tin học 6" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-7/" title="Tin Tức - Tin học 7" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-8/" title="Tin Tức - Tin học 8" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-9/" title="Tin Tức - Tin học 9" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/thpt/" title="Tin Tức - THPT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-10/" title="Tin Tức - Lớp 10" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-11/" title="Tin Tức - Lớp 11" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-12/" title="Tin Tức - Lớp 12" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/sgk-thpt/" title="Tin Tức - SGK THPT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-10/" title="Tin Tức - Tin học 10" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-11/" title="Tin Tức - Tin học 11" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-12/" title="Tin Tức - Tin học 12" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/cntt/" title="Tin Tức - CNTT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/phan-mem-quan-li-va-dieu-hanh/" title="Tin Tức - Phần mềm quản lí và điều hành" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/phan-mem-ung-dung/" title="Tin Tức - Phần mềm ứng dụng" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/ung-dung-ai/" title="Tin Tức - Ứng dụng AI" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/mang-may-tinh/" title="Tin Tức - Mạng máy tính" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lap-trinh/" title="Tin Tức - Lập trình" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/cau-truc-thi-hsg-va-ts-vao-10/" title="Tin Tức - Cấu trúc thi HSG và TS vào 10" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tai-lieu-hoc-lap-trinh/" title="Tin Tức - Tài liệu học lập trình" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/phan-mem-lap-trinh/" title="Tin Tức - Phần mềm lập trình" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lap-trinh-truc-quan/" title="Tin Tức - Lập trình trực quan" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lap-trinh-huong-thu-tuc-pop/" title="Tin Tức - Lập trình hướng thủ tục &#40;POP&#41;" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/de-hsg-tin-hoc-thcs/" title="Tin Tức - Đề HSG Tin học THCS" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/de-tin-hoc-ts-vao-10-thpt-chuyen/" title="Tin Tức - Đề Tin học TS vào 10 THPT chuyên" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/de-tin-hoc-hsg-thpt/" title="Tin Tức - Đề Tin học HSG THPT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/cham-thi/" title="Tin Tức - Chấm thi" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/themis/" title="Tin Tức - Themis" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/vnoi/" title="Tin Tức - VNOI" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/danh-sach-hoc-sinh/" title="Tin Tức - Danh sách học sinh" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lap-trinh-huong-doi-tuong-oop/" title="Tin Tức - Lập trình hướng đối tượng &#40;OOP&#41;" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/web-nguon-mo/" title="Tin Tức - Web nguồn mở" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/he-dieu-hanh/" title="Tin Tức - Hệ điều hành" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/microsoft-windows/" title="Tin Tức - Microsoft Windows" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/ho-linux/" title="Tin Tức - Họ Linux" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/may-chu/" title="Tin Tức - Máy chủ" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/co-so-du-lieu/" title="Tin Tức - Cơ sở dữ liệu" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/web-server/" title="Tin Tức - Web Server" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/hosting-domain-vps/" title="Tin Tức - Hosting-domain-VPS" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/ban-tin/" title="Tin Tức - Bản tin" type="application/rss+xml">
<link rel="preload" as="style" href="https://365.io.vn/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://365.io.vn/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://365.io.vn/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://365.io.vn/themes/default/css/style.css">
<link rel="stylesheet" href="https://365.io.vn/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://365.io.vn/themes/default/css/news.css">
<link rel="stylesheet" href="https://365.io.vn/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">DATAONLINE.IO.VN</h2>
		<p class="pull-right"><a title="DATAONLINE.IO.VN" href="https://365.io.vn/">https://365.io.vn</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>JavaScript HTMLEditor chèn liên kết vào văn bản được chọn và mở với trình duyệt mặc</h1>
		<ul class="list-inline">
			<li>Thứ sáu - 22/03/2024 13:12</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
			<p>JavaScript trong HTMLEditor chèn liên kết vào phần văn bản được chọn và mở với trình duyệt mặc định</p>
		</div>
				<div class="imghome">
			<img alt="JavaScript HTMLEditor chèn liên kết vào văn bản được chọn và mở với trình duyệt mặc" src="https://365.io.vn/uploads/news/javafx.png" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p>1) JavaScript lưu trong thư mục “resources\js\selectionHandler.js”;&nbsp;“resources\js\selectedText.js”</p><pre><code class="language-plaintext">document.addEventListener(&#039;selectionchange&#039;, function() {
    var selection = window.getSelection().toString();
    java.selectionChanged(selection !== &#039;&#039;);
});
</code></pre><pre><code class="language-plaintext">document.addEventListener(&#039;selectionchange&#039;, function() {
    var selection = window.getSelection().toString().trim();
    java.getSelectedText(selection);
});</code></pre><p>HTMLEditorSelectTextLinkInsert</p><pre><code class="language-plaintext">import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextInputDialog;
import javafx.stage.Stage;
import javafx.scene.web.HTMLEditor;
import javafx.scene.web.WebView;
import javafx.scene.web.WebEngine;

import javafx.scene.control.ToolBar;
import javafx.scene.control.Tooltip;
import netscape.javascript.JSObject;

public class HTMLEditorSelectTextLinkInsert extends Application {

    String selection;
    private final Button insertLinkButton = new Button(&quot;Chèn liên kết&quot;);

    @Override
    public void start(Stage primaryStage) {
        // Tạo một HTMLEditor
        HTMLEditor htmlEditor = new HTMLEditor();

        // Lấy toolbar của HTMLEditor
        ToolBar bar = (ToolBar) htmlEditor.lookup(&quot;.top-toolbar&quot;);
        if (bar != null) {
            insertLinkButton.setTooltip(new Tooltip(&quot;Chèn liên kết vào phàn văn bản được chọn&quot;));
            insertLinkButton.setDisable(true); // Ban đầu, nút sẽ bị tắt

            WebView webView = (WebView) htmlEditor.lookup(&quot;.web-view&quot;);
            WebEngine webEngine = webView.getEngine();
            webEngine.documentProperty().addListener((observable, oldValue, newValue) -&gt; {
                JSObject window = (JSObject) webEngine.executeScript(&quot;window&quot;);
                window.setMember(&quot;java&quot;, this);
                String filePath = &quot;/js/selectionHandler.js&quot;;
                String script = readScriptFile(filePath);
                webEngine.executeScript(script);

                filePath = &quot;/js/selectedText.js&quot;;
                script = readScriptFile(filePath);
                webEngine.executeScript(script);
            });

            insertLinkButton.setOnAction(event -&gt; {
                if (!selection.isEmpty()) {
                    String ok = askForLinkUrl();
                    if (ok != null) {
                        String linkUrl = ok;
                        String linkedText = &quot;&lt;a href=\&quot;&quot; + linkUrl + &quot;\&quot;&gt;&quot; + selection + &quot;&lt;/a&gt;&quot;;
                        webEngine.executeScript(&quot;document.execCommand(&#039;insertHTML&#039;, false, &#039;&quot; + linkedText + &quot;&#039;)&quot;);
                    }
                }
            });

            webEngine.locationProperty().addListener((observable, oldValue, newValue) -&gt; {
                if (newValue != null) {
                    htmlEditor.setHtmlText(htmlEditor.getHtmlText());
                    try {
                        URI uri = new URI(newValue);
                        if (uri.getScheme() != null &amp;&amp; (uri.getScheme().equalsIgnoreCase(&quot;http&quot;) || uri.getScheme().equalsIgnoreCase(&quot;https&quot;))) {                                                   
                            getHostServices().showDocument(uri.toString());
                        }
                    } catch (URISyntaxException e) {
                    }
                }
            });           
            bar.getItems().add(insertLinkButton);
        }

        // Tạo Scene và hiển thị
        Scene scene = new Scene(htmlEditor, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.setTitle(&quot;HTMLEditor với chèn ảnh&quot;);
        primaryStage.show();
    }

    // Phương thức để đọc nội dung của tệp JavaScript địa chỉ tương đối
    private String readScriptFile(String filePath) {
        try {
            StringBuilder contentBuilder = new StringBuilder();
            InputStream is = getClass().getResourceAsStream(filePath);
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = br.readLine()) != null) {
                contentBuilder.append(line).append(&quot;\n&quot;);
            }
            return contentBuilder.toString();

        } catch (IOException e) {
            return null;
        }
    }

// Được gọi từ JavaScript khi sự kiện selectionchange xảy ra
    public void selectionChanged(boolean hasSelection) {
        insertLinkButton.setDisable(!hasSelection); // Vô hiệu hóa nút lệnh Copy nếu không có văn bản được chọn
    }

    // Được gọi từ JavaScript khi sự kiện selectionchange xảy ra
    public void getSelectedText(String text) {
        selection = text;        
    }
    private String askForLinkUrl() {
        String uridefault = &quot;https://365.io.vn&quot;;
        System.out.println(selection);
        if ((selection.startsWith(&quot;http://&quot;)) || (selection.startsWith(&quot;https://&quot;))) {
            uridefault = selection;
        }
        TextInputDialog dialog = new TextInputDialog(uridefault);
        dialog.setTitle(&quot;Insert Link&quot;);
        dialog.setHeaderText(&quot;Enter the URL for the hyperlink:&quot;);
        dialog.setContentText(&quot;URL:&quot;);
        return dialog.showAndWait().orElse(null);
    }

    public static void main(String&#91;&#93; args) {
        launch(args);
    }
}</code></pre><p>- Kết quả:<br /><img src="https://i.imgur.com/b8IUe6d.png" /><br />&nbsp;</p>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả:</strong>
				<a href="https://365.io.vn/author/Vang-Van-Quyn-4/">Vàng Văn Quyn</a>
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://365.io.vn/savefile/lap-trinh-huong-doi-tuong-oop/javascript-htmleditor-chen-lien-ket-vao-van-ban-duoc-chon-va-mo-voi-trinh-duyet-mac-424.html" title="JavaScript HTMLEditor chèn liên kết vào văn bản được chọn và mở với trình duyệt mặc">https://365.io.vn/savefile/lap-trinh-huong-doi-tuong-oop/javascript-htmleditor-chen-lien-ket-vao-van-ban-duoc-chon-va-mo-voi-trinh-duyet-mac-424.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; DATAONLINE.IO.VN
		</div>
		<div id="contact">
			<a href="mailto:support@dataonline.io.vn">support@dataonline.io.vn</a>
		</div>
	</div>
</div>
        <div class="cookie-notice"><div><button onclick="cookie_notice_hide();">&times;</button>Chúng tôi đang sử dụng cookie để cung cấp cho bạn những trải nghiệm tốt nhất trên trang web này. Bằng cách tiếp tục truy cập, bạn đồng ý với <a href="https://365.io.vn/siteterms/privacy.html">Chính sách thu thập và sử dụng cookie</a> của chúng tôi.</div></div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://365.io.vn/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://365.io.vn/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://365.io.vn/assets/js/language/vi.js"></script>
<script src="https://365.io.vn/assets/js/DOMPurify/purify3.js"></script>
<script src="https://365.io.vn/assets/js/global.js"></script>
<script src="https://365.io.vn/assets/js/site.js"></script>
<script src="https://365.io.vn/themes/default/js/news.js"></script>
<script src="https://365.io.vn/themes/default/js/main.js"></script>
<script src="https://365.io.vn/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://365.io.vn",
            "logo": "https://365.io.vn/assets/images/logo.svg"
        }
        </script>
<script src="https://365.io.vn/themes/default/js/bootstrap.min.js">
        </script>
<script>
    var LIMIT = 7200000; // 120 phút (số phút * 60000)

    var startTime = sessionStorage.getItem("redirect_timer");
    if (!startTime) {
        startTime = Date.now();
        sessionStorage.setItem("redirect_timer", startTime);
    } else {
        startTime = parseInt(startTime, 10);
    }

    var elapsed = Date.now() - startTime;
    var remain = LIMIT - elapsed;

    if (remain > 0) {
        setTimeout(function () {
            alert("Hệ thống sẽ chuyển sang trang chấm bài.");
            window.location.replace("https://vnoj.io.vn");
        }, remain);
    } else {
        window.location.replace("https://vnoj.io.vn");
    }
</script>
</body>
</html>