原生標簽WebComponent

文章目錄

  • 介紹
  • 一、web Component
  • 二、怎么使用
  • 三、在Vue中使用
  • 使用場景


前端必備工具推薦網站(免費圖床、API和ChatAI等實用工具):
http://luckycola.com.cn/


介紹

`
平常瀏覽各個網站過程中,經常遇到的一種現象:頁面廣告。
這種廣告按照來源可分為兩種:

  • 1、站點自己的廣告
  • 2、第三方投放的廣告

第二種需要在對代理流量的目標站點里,插入開發者想要的元素,并且與此同時要保證插入的代碼與原站點之間的影響降至最低。
因此,需要一種有效的**“隔離”**手段。

主流的方案有兩種:

  1. iframe方案: frame需要一個明確的src資源鏈接,而有時候我們似乎沒必要再單獨為其去發布一個資源;iframe并未實現完全的“隔離”,原有站點還是能拿到iframe節點,并可對其進行DOM操作;
  2. web component方案:Web Components 提供了基于原生支持的、對視圖層的封裝能力,可以讓單個組件相關的 javaScript、css、html模板運行在以html標簽為界限的局部環境中,不會影響到全局,組件間也不會相互影響 。 再簡單來說:就是提供了我們自定義標簽的能力,并且提供了標簽內完整的生命周期

一、web Component

示例:pandas 是基于NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。

  • Shadow host:一個常規 DOM 節點,Shadow DOM 會被附加到這個節點上。
  • Shadow tree:Shadow DOM 內部的 DOM 樹。
  • Shadow boundary:Shadow DOM 結束的地方,也是常規 DOM 開始的地方。
  • Shadow root: Shadow tree 的根節點。

在這里插入圖片描述

二、怎么使用

1、代碼如下(示例):

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Web Components</title>
</head>
<body><custom-btn></custom-btn><script>class MyBtn extends HTMLElement {constructor() {// 繼承父super();// 標簽模式let p = this.h('p');p.innerHTML = '我只自定義p內容啊';p.setAttribute('style', 'height:200px;width:200px;border:1px solid #ccc;background:yellow');// template模式const template = this.h('template')template.innerHTML = `<div>測試</div><style>div{height:200px;width:200px;background:blue;}</style>`// 創建shadowDom// mode 屬性,值可以是 open 或者 closed,// open 表示可以通過頁面內的 JavaScript 方法來獲取 Shadow DOM,例如使用 Element.shadowRoot 屬性:// 如果你將一個 Shadow root 附加到一個 Custom element 上,并且將 mode 設置為 closed,那么就不可以從外部獲取 Shadow DOM 了——myCustomElem.shadowRoot 將會返回 null。瀏覽器中的某些內置元素就是如此,例如<video>,包含了不可訪問的 Shadow DOM。let showDow = this.attachShadow({mode: 'open'});console.log('showDow:', showDow);// 插入標簽showDow.appendChild(p);// 插入模版showDow.appendChild(template.content.cloneNode(true));};h(tag) {return document.createElement(tag);}/*** 生命周期*///當自定義元素第一次被連接到文檔 DOM 時被調用。connectedCallback () {console.log('我已經插入了!!!')}//當自定義元素與文檔 DOM 斷開連接時被調用。disconnectedCallback () {console.log('我已經斷開了!!!')}//當自定義元素被移動到新文檔時被調用adoptedCallback () {console.log('我被移動了!!!')}//當自定義元素的一個屬性被增加、移除或更改時被調用attributeChangedCallback () {console.log('我被改變了!!!')}}window.customElements.define('custom-btn', MyBtn)</script>
</body>
</html>

2、效果展示:
在這里插入圖片描述

三、在Vue中使用

1、第一步:defineCustomElement

代碼如下(示例):

/*vite config ts 配置*/
vue({template:{compilerOptions:{isCustomElement:(tag)=> tag.includes('xiaoman-')}}

2、第二步:父組件 中使用

<template><div><custom-btn :title=" JSON.stringify(name) "></xiaoman-btn></div>
</template><script setup lang='ts'>
import { ref, reactive, defineCustomElement } from 'vue'
//自定義元素模式  要開啟這個模式,只需要將你的組件文件以 .ce.vue 結尾即可
import customVueVue from './components/custom-vue.ce.vue'
const Btn = defineCustomElement(customVueVue)
customElements.define('custom-btn', Btn)const name = ref({a:1})</script><style scoped lang='less'></style>

3、第二步:子組件 中使用

<template><div>test123213 {{title}}</div>
</template><script setup lang='ts'>import { ref, reactive } from 'vue'defineProps<{title:string
}>()</script><style scoped lang='less'></style>

使用場景

插入廣告場景、微前端之無界等

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15674.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15674.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15674.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蜜罐技術是一種什么防御技術?實現原理是什么?

前言&#xff1a;蜜罐技術的出現改變了這種被動態勢&#xff0c;它通過吸引、誘騙攻擊者&#xff0c;研究學習攻擊者的攻擊目的和攻擊手段&#xff0c;從而延緩乃至阻止攻擊破壞行為的發生&#xff0c;有效保護真實服務資源。 自網絡誕生以來&#xff0c;攻擊威脅事件層出不窮…

簡述Vue 2.0 響應式數據的原理

Vue 2.0 響應式數據的原理主要基于以下幾個關鍵點&#xff1a; 數據劫持與Object.defineProperty&#xff1a; Vue 2.0 使用 Object.defineProperty 方法來劫持對象的屬性&#xff0c;為其添加 getter 和 setter 方法。當數據被訪問或修改時&#xff0c;這些 getter 和 setter …

類和對象【六】友元和內部類

文章目錄 友元友元的作用友元的缺點友元函數語法&#xff1a;特點&#xff1a; 友元類語法&#xff1a;特點&#xff1a; 內部類概念特點 友元 友元的作用 友元提供了一種打破封裝的方式&#xff0c;有時提供了便利。 友元的主要作用就是打破封裝 即可以讓一個類的友元函數…

爬蟲100個Python例子優化

今天看到一個Python 100例的在線資源,感覺每個都需要去點,太費時間了,于是,使用Python將數據爬取下來,方便查看。實際效果如下: 。。。。。。 用了13分鐘,當然,這是優化后的效果,如果沒有優化,需要的時間更長。 爬取url如下: https://www.runoob.com/python/pytho…

Vue小程序項目知識積累(三)

1.CSS中的var( ) var() 函數用于插入自定義屬性&#xff08;也稱為CSS變量&#xff09;的值。 var(--main-bg-color,20rpx) 設置一個CSS變量的值&#xff0c;但是如果 --main-bg-color 變量不存在&#xff0c;它將默認返回 20rpx。 CSS變量必須在一個有效的CSS規則&#xf…

uniapp+vue3+ts開發小程序或者app架構時候的UI框架選型

使用vue3tsviteuniapp開發小程序或者跨平臺app的趨勢越來越高&#xff0c;有一個順手的UI的框架還是非常重要的&#xff0c;官方維護的 uni-ui&#xff0c;支持全端&#xff0c;而且有類型提示&#xff0c;目前已經內置到 GitHub - Sjj1024/uniapp-vue3: 使用uniapp和vue3 ts …

搭建CMS系統

搭建CMS系統 1 介紹 內容管理系統&#xff08;Content Management System&#xff0c;CMS&#xff09;是一種用于管理、發布和修改網站內容的系統。開源的CMS系統有WordPress、帝國CMS等&#xff0c;國產的Halo很不錯。 WordPress參考地址 # 官網 https://wordpress.org/# …

為什么IP地址需要劃分為公有和私有地址?

一.知識點的解釋 1.在現在的網絡中&#xff0c;IP地址分為公網IP地址和私有IP地址。公網IP是在Internet使用的IP地址&#xff0c;而私有IP地址則是在局域網中使用的IP地址。 2.私有IP地址是一段保留的IP地址。只使用在局域網中&#xff0c;無法在Internet上使用。 二.為什么…

Python腳本必加代碼:99%的程序員都忽視了這個細節!

文章目錄 一、初識 if __name__ __main__二、__name__ 和 __main__ 是什么&#xff1f;三、實戰講解四、實際應用場景測試代碼提高代碼可重用性避免不必要的執行 五、深入理解和更多用法使用 argparse 解析命令行參數使用 unittest 進行單元測試使用 multiprocessing 創建子進…

c#入門學習筆記

p35 字符串 在字符串之前加上一個&#xff0c;可以保持原生字符&#xff0c;不用再進行轉義&#xff08;除了雙引號&#xff09;。 例如&#xff1a; "A short list: item 1 item 2"或者&#xff1a; "C:\Temp\MyDir\MyFile.doc"這相當于"C:\\Tem…

網盤攻略,羊毛薅到底,這4招太狠了

僅供參考 先買原石會員賬戶&#xff0c;再綁手機。 自己手機千萬不要去注冊115&#xff0c;先去馬云家買原石會員帳戶(五十多自帶33T永久空間&#xff0c;非常實惠)。買完原石帳戶后再用手機登錄綁定帳戶和修改密碼。買8T永久空間8年VIP 然后再花560元買8T永久空間8年vip&…

嵌入式全棧開發學習筆記---C語言筆試復習大全22

目錄 結構體 結構體的聲明 定義結構體變量 訪問結構體成員進行初始化 通過結構體變量名訪問結構體成員 結構體指針 結構體指針的定義 通過結構體指針訪問結構體成員 結構體數組 結構體數組的定義 遍歷結構體數組 結構體的長度&#xff08;筆試重點&#xff09; 上一…

深入理解C++多態-虛函數

引言 C多態的實現方式可以分為靜態多態和動態多態&#xff0c;其中靜態多態主要有函數重裝和模板兩種方式&#xff0c;動態多態就是虛函數。下面我們將通過解答以下幾個問題的方式來深入理解虛函數的原理&#xff1a; 為什么要引入虛函數&#xff1f;&#xff08;用來解決什么…

2024年最新信息安全標準匯總

這些標準是我們在數字化時代保障網絡安全、數據安全的重要基石&#xff0c;對于維護國家安全、企業利益和個人信息安全具有至關重要的作用。 隨著科技的快速發展&#xff0c;網絡空間的安全威脅也在不斷演變&#xff0c;從復雜的網絡攻擊到個人信息泄露&#xff0c;這些安全風…

JAVA面試題大全(十四)

1、Kafka 可以脫離 Zookeeper 單獨使用嗎&#xff1f;為什么&#xff1f; kafka不能脫離zookper單獨使用&#xff0c;因為kafka使用zookper管理和協調kafka的節點服務器。 2、Kafka 有幾種數據保留的策略&#xff1f; Kafka提供了多種數據保留策略&#xff0c;這些策略用于定…

哈希雙指針

文章目錄 一、哈希1.1兩數之和1.2字母異位詞分組1.3最長子序列 二、雙指針2.1[移動零](https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked)2.2[盛最多水的容器](https://leetcode.cn/problems/container-with-most-water/d…

嵌入式0基礎開始學習 ⅠC語言(7)指針

0.問題引入 int a 5; a 1024; //把1024存放到變量a的地址中去 b a; // 取變量a的值&#xff0c;賦值給b >在c語言中&#xff0c;任何一個變量&#xff0c;都有兩層含義 (1)代表變量的存儲單元的地址&#xff1a;變量的地址…

藍橋樓賽第30期-Python-第三天賽題 統計學習數據題解

樓賽 第30期 Python 模塊大比拼 統計學習數據 介紹 JSON&#xff08;JavaScript Object Notation, /?d?e?s?n/&#xff09;是一種輕量級的數據交換格式&#xff0c;最初是作為 JavaScript 的子集被發明的&#xff0c;但目前已獨立于編程語言之外&#xff0c;成為了通用的…

分享10個國內可以使用的GPT中文網站

在今天的人工智能領域&#xff0c;基于對話的語言模型已成為研究的熱點&#xff0c;尤其是像 ChatGPT 這樣因其出色的語言理解與對話交互能力而廣受關注的模型。本文將介紹10個國內可以直接使用GPT的網站&#xff0c;旨在為大家在選擇和使用這些優秀的AI工具時提供有價值的參考…

使用pyqt繪制一個愛心!

使用pyqt繪制一個愛心&#xff01; 介紹效果代碼 介紹 使用pyqt繪制一個愛心&#xff01; 效果 代碼 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget from PyQt5.QtGui import QPainter, QPen, QBrush, QColor from PyQt5.QtCore import Qt, Q…