微信小程序页面实现分享功能

window全局属性

name

📖 window.name

定义window.namewindow 对象的一个 可读写字符串属性

作用:表示当前浏览上下文(即浏览器窗口或标签页)的名字。

默认值:空字符串 ""

类型:始终是字符串。

🔑 特点

用于窗口/标签页的标识
当你在 <a target="name">window.open(url, "name") 里指定的 name 值,就是和 window.name 绑定的。

  • 如果有一个已存在的窗口/标签页的 window.name 值等于 "myWin",那么 window.open(url, "myWin") 就会在那个窗口里打开。
  • 如果没有,就会新建一个窗口,并把它的 window.name 设置为 "myWin"

持久化特性
window.name 的值在 页面跳转时不会丢失(即使跳转到不同域名的页面,值仍然保留)。

  • 这在以前被用来做 跨页面数据传递
  • 但因为有安全风险(不同域名也能读取),现在通常用 postMessagelocalStorage 来代替。

字符串存储
无论你给它赋什么,它都会转换成字符串。

1
2
window.name = 123;
console.log(window.name); // "123"

open()

📖 window.open()

window.open()打开一个新的浏览上下文(标签页 / 窗口 / iframe),并加载指定的 URL。

1
window.open(url, target, windowFeatures);

🧩 参数

  1. url(可选):要打开的页面地址,默认 about:blank
  2. target(可选):在哪个上下文打开
    • _blank → 新标签/窗口
    • _self → 当前窗口
    • _parent → 父级框架
    • _top → 顶级框架
    • "自定义名字" → 如果已有这个名字的窗口就复用,否则新建
  3. windowFeatures(可选):字符串,控制新窗口的特性,比如:
    • width=600,height=400 → 大小
    • left=100,top=100 → 位置
    • popup → 弹出式窗口(工具栏等最简化)
    • noopener → 禁止新窗口访问 window.opener
    • noreferrer → 不带 Referer 头,同时隐式加 noopener

返回值:WindowProxy 对象(可以用来操作新窗口,但受同源策略限制)。

✅ 比如

1
2
3
4
5
window.open(
"https://example.com",
"PopupWin",
"popup,width=400,height=300,left=200,top=100"
);

getSelection()

📖 返回一个 Selection 对象,表示用户选择的文本范围或光标的当前位置。

1
const selection = window.getSelection();

✅ 常见用法

  1. 获取用户选中的文本内容

    1
    2
    const selection = window.getSelection();
    console.log(selection.toString()); // 打印用户选中的文字
  2. 获取选取的范围

    1
    2
    3
    4
    5
    const selection = window.getSelection();
    if (selection.rangeCount > 0) {
    const range = selection.getRangeAt(0);
    console.log(range.startContainer, range.endContainer);
    }
  3. 清除选取

    1
    window.getSelection().removeAllRanges();
  4. 手动设置选取

    1
    2
    3
    4
    5
    6
    7
    const range = document.createRange();
    const target = document.getElementById("text");
    range.selectNodeContents(target);

    const selection = window.getSelection();
    selection.removeAllRanges();
    selection.addRange(range);