TML 使用超級(jí)鏈接與網(wǎng)絡(luò)上的另一個(gè)文檔相連。
幾乎可以在所有的網(wǎng)頁(yè)中找到鏈接。點(diǎn)擊鏈接可以從一張頁(yè)面跳轉(zhuǎn)到另一張頁(yè)面。
實(shí)例
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
<a href="/index.html">本文本</a> 是一個(gè)指向本網(wǎng)站中的一個(gè)頁(yè)面的鏈接。</p>
<p><a >本文本</a> 是一個(gè)指向萬(wàn)維網(wǎng)上的頁(yè)面的鏈接。</p>
</body>
</html>
[/demo]
本例演示如何在 HTML 文檔中創(chuàng)建鏈接。
將圖像作為鏈接
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
您也可以使用圖像來(lái)作鏈接:
<a href="/example/html/lastpage.html">
<img border="0" src="./imagecopy1234567890/test.gif" />
</a>
</p>
</body>
</html>
[/demo]
本例演示如何使用圖像作為鏈接。
(可以在本頁(yè)底端找到更多實(shí)例)
HTML 超鏈接(鏈接)
超鏈接可以是一個(gè)字,一個(gè)詞,或者一組詞,也可以是一幅圖像,您可以點(diǎn)擊這些內(nèi)容來(lái)跳轉(zhuǎn)到新的文檔或者當(dāng)前文檔中的某個(gè)部分。
當(dāng)您把鼠標(biāo)指針移動(dòng)到網(wǎng)頁(yè)中的某個(gè)鏈接上時(shí),箭頭會(huì)變?yōu)橐恢恍∈帧?/p>
我們通過(guò)使用 <a> 標(biāo)簽在 HTML 中創(chuàng)建鏈接。
有兩種使用 <a> 標(biāo)簽的方式:
通過(guò)使用 href 屬性 - 創(chuàng)建指向另一個(gè)文檔的鏈接
通過(guò)使用 name 屬性 - 創(chuàng)建文檔內(nèi)的書簽
什么是超文本?
標(biāo)記語(yǔ)言的真正威力在于其收集能力,它可以將收集來(lái)的文檔組合成一個(gè)完整的信息庫(kù),并且可以將文檔庫(kù)與世界上的其他文檔集合鏈接起來(lái)。
這樣的話,讀者不僅可以完全控制文檔在屏幕上的顯示,還可以通過(guò)超鏈接來(lái)控制瀏覽信息的順序。這就是 HTML 和 XHTML 中的 “HT” - 超文本(hypertext),就是它將整個(gè) Web 網(wǎng)絡(luò)連接起來(lái)。
超文本的基礎(chǔ)知識(shí)
超文本的基本特征就是可以超鏈接文檔;你可以指向其他位置,該位置可以在當(dāng)前的文檔中、局域網(wǎng)中的其他文檔,也可以在因特網(wǎng)上的任何位置的文檔中。這些文檔組成了一個(gè)雜亂的信息網(wǎng)。目標(biāo)文檔通常與其來(lái)源有某些關(guān)聯(lián),并且豐富了來(lái)源;來(lái)源中的鏈接元素則將這種關(guān)系傳遞給瀏覽者。
超鏈接可以用于各種效果。超鏈接可以用在目錄和主題列表中。瀏覽者可以在瀏覽器屏幕上單擊鼠標(biāo)或在鍵盤上按下按鍵,從而選擇并自動(dòng)跳轉(zhuǎn)到文檔中自己感興趣的那個(gè)主題,或跳轉(zhuǎn)到世界上某處完全不同的集合中的某個(gè)文檔。
超鏈接還可以向?yàn)g覽者指出有關(guān)文檔中某個(gè)主題的更多信息。例如,“如果您想了解更詳細(xì)的信息,請(qǐng)參閱某某頁(yè)面?!薄W髡呖梢允褂贸溄觼?lái)減少重復(fù)信息。例如,我們建議創(chuàng)作者在每個(gè)文檔中都簽署上自己的姓名。這樣就可以使用一個(gè)將名字和另一個(gè)包含地址、電話號(hào)碼等信息的單獨(dú)文檔鏈接起來(lái)的超鏈接,而不必在每個(gè)文檔中都包含完整的聯(lián)系信息。
超鏈接(hyper text),或者按照標(biāo)準(zhǔn)叫法稱為錨(anchor),是使用 <a> 標(biāo)簽標(biāo)記的,可以用兩種方式表示。錨的一種類型是在文檔中創(chuàng)建一個(gè)熱點(diǎn),當(dāng)用戶激活或選中(通常是使用鼠標(biāo))這個(gè)熱點(diǎn)時(shí),會(huì)導(dǎo)致瀏覽器進(jìn)行鏈接。瀏覽器會(huì)自動(dòng)加載并顯示同一文檔或其他文檔中的某個(gè)部分,或觸發(fā)某些與因特網(wǎng)服務(wù)相關(guān)的操作,例如發(fā)送電子郵件或下載特殊文件等。錨的另一種類型會(huì)在文檔中創(chuàng)建一個(gè)標(biāo)記,該標(biāo)記可以被超鏈接引用。
還有一些與超鏈接相關(guān)聯(lián)的鼠標(biāo)相關(guān)事件。這些事件與 JavaScript 結(jié)合使用可以產(chǎn)生一些令人激動(dòng)的效果。
注釋
錨的這兩種類型都使用同樣的標(biāo)簽;也許這就是它們擁有同樣的名稱的原因。但是我們發(fā)現(xiàn),如果將它們區(qū)分開,把提供熱點(diǎn)和超鏈接地址的錨看作“鏈接”,而用于標(biāo)記文檔的目標(biāo)部分的錨稱為“錨”,那么您將更容易理解這兩種類型的錨。
HTML 鏈接語(yǔ)法
鏈接的 HTML 代碼很簡(jiǎn)單。它類似這樣:
<a href="url">Link text</a>
href 屬性規(guī)定鏈接的目標(biāo)。
開始標(biāo)簽和結(jié)束標(biāo)簽之間的文字被作為超級(jí)鏈接來(lái)顯示。
實(shí)例
<a >Visit W3School</a>
上面這行代碼顯示為:Visit W3School
點(diǎn)擊這個(gè)超鏈接會(huì)把用戶帶到 W3School 的首頁(yè)。
提示:"鏈接文本" 不必一定是文本。圖片或其他 HTML 元素都可以成為鏈接。
HTML 鏈接 - target 屬性
使用 Target 屬性,你可以定義被鏈接的文檔在何處顯示。
下面的這行會(huì)在新窗口打開文檔:
<a target="_blank">Visit W3School!</a>
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<a target="_blank">Visit W3School!</a>
<p>如果把鏈接的 target 屬性設(shè)置為 "_blank",該鏈接會(huì)在新窗口中打開。</p>
</body>
</html>
[/demo]
HTML 鏈接 - name 屬性
name 屬性規(guī)定錨(anchor)的名稱。
您可以使用 name 屬性創(chuàng)建 HTML 頁(yè)面中的書簽。
書簽不會(huì)以任何特殊方式顯示,它對(duì)讀者是不可見的。
當(dāng)使用命名錨(named anchors)時(shí),我們可以創(chuàng)建直接跳至該命名錨(比如頁(yè)面中某個(gè)小節(jié))的鏈接,這樣使用者就無(wú)需不停地滾動(dòng)頁(yè)面來(lái)尋找他們需要的信息了。
命名錨的語(yǔ)法:
<a name="label">錨(顯示在頁(yè)面上的文本)</a>
提示:錨的名稱可以是任何你喜歡的名字。
提示:您可以使用 id 屬性來(lái)替代 name 屬性,命名錨同樣有效。
實(shí)例
首先,我們?cè)?HTML 文檔中對(duì)錨進(jìn)行命名(創(chuàng)建一個(gè)書簽):
<a name="tips">基本的注意事項(xiàng) - 有用的提示</a>
然后,我們?cè)谕粋€(gè)文檔中創(chuàng)建指向該錨的鏈接:
<a href="#tips">有用的提示</a>
您也可以在其他頁(yè)面中創(chuàng)建指向該錨的鏈接:
<a >有用的提示</a>
在上面的代碼中,我們將 # 符號(hào)和錨名稱添加到 URL 的末端,就可以直接鏈接到 tips 這個(gè)命名錨了。
基本的注意事項(xiàng) - 有用的提示:
注釋:請(qǐng)始終將正斜杠添加到子文件夾。假如這樣書寫鏈接:,就會(huì)向服務(wù)器產(chǎn)生兩次 HTTP 請(qǐng)求。這是因?yàn)榉?wù)器會(huì)添加正斜杠到這個(gè)地址,然后創(chuàng)建一個(gè)新的請(qǐng)求,就像這樣:。
提示:命名錨經(jīng)常用于在大型文檔開始位置上創(chuàng)建目錄??梢詾槊總€(gè)章節(jié)賦予一個(gè)命名錨,然后把鏈接到這些錨的鏈接放到文檔的上部。如果您經(jīng)常訪問(wèn)百度百科,您會(huì)發(fā)現(xiàn)其中幾乎每個(gè)詞條都采用這樣的導(dǎo)航方式。
提示:假如瀏覽器找不到已定義的命名錨,那么就會(huì)定位到文檔的頂端。不會(huì)有錯(cuò)誤發(fā)生。
更多實(shí)例
在新的瀏覽器窗口打開鏈接
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<a target="_blank">Visit W3School!</a>
<p>如果把鏈接的 target 屬性設(shè)置為 "_blank",該鏈接會(huì)在新窗口中打開。</p>
</body>
</html>
[/demo]
本例演示如何在新窗口打開一個(gè)頁(yè)面,這樣的話訪問(wèn)者就無(wú)需離開你的站點(diǎn)了。
鏈接到同一個(gè)頁(yè)面的不同位置
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
<a href="#C4">查看 Chapter 4。</a>
</p>
<h2>Chapter 1</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 2</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 3</h2>
<p>This chapter explains ba bla bla</p>
<h2><a name="C4">Chapter 4</a></h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 5</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 6</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 7</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 8</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 9</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 10</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 11</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 12</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 13</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 14</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 15</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 16</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 17</h2>
<p>This chapter explains ba bla bla</p>
</body>
</html>
[/demo]
本例演示如何使用鏈接跳轉(zhuǎn)至文檔的另一個(gè)部分
跳出框架
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>被鎖在框架中了嗎?</p>
<a href="/index.html"
target="_top">請(qǐng)點(diǎn)擊這里!</a>
</body>
</html>
[/demo]
本例演示如何跳出框架,假如你的頁(yè)面被固定在框架之內(nèi)。
創(chuàng)建電子郵件鏈接
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
這是郵件鏈接:
<a href="mailto:someone@microsoft.com?subject=Hello%20again">發(fā)送郵件</a>
</p>
<p>
<b>注意:</b>應(yīng)該使用 %20 來(lái)替換單詞之間的空格,這樣瀏覽器就可以正確地顯示文本了。
</p>
</body>
</html>
[/demo]
本例演示如何鏈接到一個(gè)郵件。(本例在安裝郵件客戶端程序后才能工作。)
創(chuàng)建電子郵件鏈接 2
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
這是另一個(gè) mailto 鏈接:
<a href="mailto:someone@microsoft.com?cc=someoneelse@microsoft.com&bcc=andsomeoneelse2@microsoft.com&subject=Summer%20Party&body=You%20are%20invited%20to%20a%20big%20summer%20party!">發(fā)送郵件!</a>
</p>
<p>
<b>注意:</b>應(yīng)該使用 %20 來(lái)替換單詞之間的空格,這樣瀏覽器就可以正確地顯示文本了。
</p>
</body>
</html>
[/demo]
本例演示更加復(fù)雜的郵件鏈接。
HTML 鏈接標(biāo)簽
標(biāo)簽 描述
<a> 定義錨。
擊上方藍(lán)色“Go語(yǔ)言中文網(wǎng)”關(guān)注我們,領(lǐng)全套Go資料,每天學(xué)習(xí) Go 語(yǔ)言
發(fā)送郵件是一個(gè)很常見的需求:用戶郵箱驗(yàn)證、郵箱召回等。Go 語(yǔ)言標(biāo)準(zhǔn)庫(kù)自帶 net/smtp 庫(kù),實(shí)現(xiàn)了 smtp 協(xié)議,用于發(fā)送郵件。然而這個(gè)庫(kù)比較原始,使用不方便,而且官方聲明不再增加新功能。于是乎出現(xiàn)了一些強(qiáng)大的第三方郵件庫(kù),今天推薦的這個(gè)庫(kù)就是其中之一。
項(xiàng)目地址:https://github.com/jordan-wright/email,Star 數(shù) 1.3k+。
email 包的設(shè)計(jì)易于使用,但又足夠靈活以免受到限制。目的是為開發(fā)者提供友好的電子郵件接口。
該包當(dāng)前支持以下功能:
先安裝:
$ go get github.com/jordan-wright/email
后使用,使用 Gmail 發(fā)送郵件:
e := email.NewEmail()
e.From = "Jordan Wright <test@gmail.com>"
e.To = []string{"test@example.com"}
e.Bcc = []string{"test_bcc@example.com"}
e.Cc = []string{"test_cc@example.com"}
e.Subject = "Awesome Subject"
e.Text = []byte("Text Body is, of course, supported!")
e.HTML = []byte("<h1>Fancy HTML is supported, too!</h1>")
e.Send("smtp.gmail.com:587", smtp.PlainAuth("", "test@gmail.com", "password123", "smtp.gmail.com"))
可見該庫(kù)最終還是使用標(biāo)準(zhǔn)庫(kù) net/smtp 進(jìn)行實(shí)際的郵件發(fā)送。
e.From = "Go語(yǔ)言中文網(wǎng)<polaris@studygolang.com>”
收到的郵件不會(huì)顯示發(fā)件人,有人提了一個(gè) PR 支持 non-US-ASCII,但還未被 merge;根據(jù)該 PR 的提示,我們可以這樣解決此問(wèn)題:
e.From = mime.QEncoding.Encode("UTF-8", "Go語(yǔ)言中文網(wǎng)") + "<polaris@studygolang.com>"
tlsConfig := &tls.Config{
InsecureSkipVerify: true,
ServerName: smtpHost,
}
e.SendWithTLS(addr, auth, tlsConfig)
如果郵件中需要帶上附件,這個(gè)庫(kù)很方便:
e.AttachFile("test.txt")
也可以是通過(guò) io.Reader 讀取文件:
func (e *Email) Attach(r io.Reader, filename string, c string) (a *Attachment, err error)
其中 filename 是放入附件顯示的文件名,c 是 Content-Type,如果為空,則使用 application/octet-stream。
該庫(kù)還支持連接池,例如:
p, err := email.NewPool(
"smtp.qq.com:25",
4,
smtp.PlainAuth("", "274768166@qq.com", "password", "smtp.qq.com"))
通過(guò) p 的 Send 方法執(zhí)行發(fā)送操作:
p.Send(e, 10e9)
完整例子如下:
package main
import (
"log"
"mime"
"net/smtp"
"net/textproto"
"strconv"
"sync"
"github.com/jordan-wright/email"
)
func main() {
var wg sync.WaitGroup
ch := make(chan *email.Email, 4)
err := sendEmailByPool(ch, &wg)
if err != nil {
panic(err)
}
for i := 0; i < 4; i++ {
wg.Add(1)
ch <- &email.Email{
To: []string{"polaris@studygolang.com"},
From: mime.QEncoding.Encode("UTF-8", "Go語(yǔ)言中文網(wǎng)") + "<274768166@qq.com>",
Subject: "Pool" + strconv.Itoa(i),
HTML: []byte("<h1>這是 HTML 正文</h1>"),
Headers: textproto.MIMEHeader{},
}
}
wg.Wait()
close(ch)
}
func sendEmailByPool(ch <-chan *email.Email, wg *sync.WaitGroup) error {
p, err := email.NewPool(
"smtp.qq.com:25",
4,
smtp.PlainAuth("", "274768166@qq.com", "password", "smtp.qq.com"))
if err != nil {
return err
}
for i := 0; i < 4; i++ {
go func() {
for e := range ch {
err := p.Send(e, 10e9)
if err != nil {
log.Println("Send Email fail, err:", err)
} else {
log.Println("Send Email Successfully!")
}
wg.Done()
}
}()
}
return nil
}
通過(guò)上面的介紹,你應(yīng)該掌握了該庫(kù)的使用,該庫(kù)是不是滿足了你對(duì)發(fā)郵件的需求?
最后附上一個(gè)完整的帶附件的發(fā)郵件程序:
package main
import (
"log"
"mime"
"net/smtp"
"strings"
"github.com/jordan-wright/email"
)
func main() {
sendEmail("測(cè)試第三方 email 庫(kù)", "xuxinhua@studygolang.com")
}
func sendEmail(subject string, tos ...string) error {
e := email.NewEmail()
smtpUsername := "274768166@qq.com"
e.From = mime.QEncoding.Encode("UTF-8", "Go語(yǔ)言中文網(wǎng)") + "<274768166@qq.com>"
e.To = tos
e.Subject = subject
e.HTML = []byte("<h1>HTML 正文</h1>")
e.AttachFile("zap.log")
auth := smtp.PlainAuth("", smtpUsername, "password", "smtp.qq.com")
err := e.Send("smtp.qq.com:25", auth)
if err != nil {
log.Println("Send Mail to", strings.Join(tos, ","), "error:", err)
return err
}
log.Println("Send Mail to", strings.Join(tos, ","), "Successfully")
return nil
}
挑戰(zhàn)30天在頭條寫日記#
關(guān)于電子郵件和網(wǎng)頁(yè)等服務(wù)如何使用網(wǎng)絡(luò)進(jìn)行連接的概述,具體的操作步驟和操作指南:
打開您的電子郵件客戶端,如Microsoft Outlook、Gmail、Apple Mail等。
在客戶端中找到 "設(shè)置" 或 "首選項(xiàng)" 選項(xiàng)。
選擇 "添加賬戶" 或 "新建郵箱賬戶"。
輸入您的電子郵件地址和密碼。
在配置中,選擇 "手動(dòng)設(shè)置" 或 "高級(jí)設(shè)置"。
輸入電子郵件提供商提供的服務(wù)器設(shè)置信息,包括傳入(IMAP或POP3)和傳出(SMTP)服務(wù)器地址、端口號(hào)、加密類型等。
確保您的用戶名和密碼正確。
客戶端將嘗試連接到電子郵件服務(wù)器。
測(cè)試是否能夠成功接收和發(fā)送電子郵件。
一旦測(cè)試連接成功,保存設(shè)置并完成配置。
您可開始發(fā)送和接收電子郵件。
啟動(dòng)您的Web瀏覽器,如Google Chrome、Mozilla Firefox、Microsoft Edge等。
在瀏覽器的地址欄中輸入您要訪問(wèn)的網(wǎng)頁(yè)的URL(統(tǒng)一資源定位符)。
瀏覽器會(huì)將輸入的URL發(fā)送給DNS(域名系統(tǒng))服務(wù)器,以獲取與該網(wǎng)址相關(guān)的IP地址。
一旦瀏覽器知道服務(wù)器的IP地址,它將建立一個(gè)TCP(傳輸控制協(xié)議)連接到服務(wù)器。
服務(wù)器接收到瀏覽器的請(qǐng)求,并將網(wǎng)頁(yè)的內(nèi)容作為HTTP(超文本傳輸協(xié)議)響應(yīng)返回給瀏覽器。
瀏覽器接收到服務(wù)器的響應(yīng)后,將網(wǎng)頁(yè)的HTML、CSS和JavaScript等內(nèi)容渲染到您的屏幕上。
您現(xiàn)在可在瀏覽器中瀏覽網(wǎng)頁(yè),與頁(yè)面上的鏈接交互,填寫表單等。
電子郵件使用諸如SMTP、POP3和IMAP等協(xié)議進(jìn)行通信,而網(wǎng)頁(yè)使用HTTP和HTTPS協(xié)議與服務(wù)器交互,這些協(xié)議和通信方式都是標(biāo)準(zhǔn)化的。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。