# 如何在站点自定义中利用“在新标签页中打开所有外部链接”设置

**URL:** <https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174>\
**Category:** Development\
**Created:** [2023年三月15日 03:08 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174 "2023-03-15T03:08:51Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)\
**Post date:** [2023年三月15日 03:08 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/1 "2023-03-15T03:08:51Z")

</div>

我经常访问的一个网站在用户卡片上有一个自定义设置，其中包含一个指向每个用户特定外部网站的链接（基本上是用户个人资料）。但是，尽管我启用了“在新标签页中打开所有外部链接”设置，但单击此链接会在当前标签页中打开页面。管理员是否有办法引用用户的“在新标签页中打开所有外部链接”设置，以便遵守此设置？

---

<div class="post-metadata">

**Author:** ![maiki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maiki/32/233950_2.png) [@maiki](https://meta.discourse.org/u/maiki)\
**Post date:** [2023年三月15日 06:26 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/2 "2023-03-15T06:26:14Z")

</div>

您知道这是哪个主题/组件吗？我认为可以在那里提出这个问题，也许可以更新它以考虑站点设置。🙂

---

<div class="post-metadata">

**Author:** ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)\
**Post date:** [2023年三月15日 11:44 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/3 "2023-03-15T11:44:40Z")

</div>

我以为它是定制的，但我可以和管理员确认一下。

---

<div class="post-metadata">

**Author:** ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)\
**Post date:** [2023年三月15日 14:40 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/4 "2023-03-15T14:40:57Z")

</div>

听起来管理员有一个自定义用户字段用于用户的外部个人资料链接，然后构建了一个自定义主题。他们遵循了 [(Retired) Use an ID in a custom user field to link to a user's external profile](https://meta.discourse.org/t/use-an-id-in-a-custom-user-field-to-link-to-a-users-external-profile/41218) 的说明。我应该在那里询问如何利用有关在新标签页中打开的用户设置吗？

---

<div class="post-metadata">

**Author:** ![maiki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maiki/32/233950_2.png) [@maiki](https://meta.discourse.org/u/maiki)\
**Post date:** [2023年三月15日 19:09 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/5 "2023-03-15T19:09:44Z")

</div>

> [@seanblue](#):
>
> 我应该在那里询问如何使用关于在新标签页中打开的用户设置吗？

我认为这取决于您是否希望它使用该设置；自定义设置不考虑该设置，尽管它看起来正确地添加了 `target`：

> [@techAPJ](#):
>
> ` const link = \"\u003ca href='\"+url+\"' target='_blank'\u003e\"+url+\"\u003c/a\u003e\";`

包含 `target='_blank'` 将在新标签页/窗口中打开，无论网站设置如何，因为它们不相互作用。

在链接未在新标签页中打开的网站上，当您检查源代码时，链接是否包含该 `target` 值？

---

<div class="post-metadata">

**Author:** ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)\
**Post date:** [2023年三月15日 20:08 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/6 "2023-03-15T20:08:55Z")

</div>

如果他们想检查站点设置，他们可以在现有的自定义中执行类似的操作

```js
// 设置 siteSettings 和 target 变量：
const siteSettings = api.container.lookup('site-settings:main');
const target = siteSettings.default_other_external_links_in_new_tab ? "_blank" : ""

// 修改创建链接的 if 语句以使用 target 变量：
if (userFields && userFields[userFieldId]) {
  const url = "http://myawesomewebsite.com/user/" + userFields[userFieldId];
  const link = `<a href="${url}" target="${target}">${url}</a>`;
  return Ember.Object.create({ link, name: externalUserIdField.get('name') });
} else {
  return null;
}

```

---

<div class="post-metadata">

**Author:** ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)\
**Post date:** [2023年三月15日 21:07 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/7 "2023-03-15T21:07:06Z")

</div>

> [@awesomerobot](#):
>
> If they wanted to check the site setting

有办法检查用户设置吗？我的理解是，站点设置只是新用户的默认设置，但理想情况下，此链接会尊重用户对其自身设置所做的更改。一个用户可能希望它在同一选项卡中打开，而另一个用户可能希望它在新选项卡中打开。

---

<div class="post-metadata">

**Author:** ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)\
**Post date:** [2023年三月15日 22:08 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/8 "2023-03-15T22:08:11Z")

</div>

啊，对了，我忽略了“用户”部分 😅 对不起

使用用户设置并没有太大区别，您只需更改前两个常量以引用用户：

```js
// 设置 user 和 target 变量：
const user = api.getCurrentUser()
const target = user?.user_option?.external_links_in_new_tab ? "_blank" : ""

```

然后其他一切都会相同。

如果这能更像核心一样工作，我们会检查用户是否存在，如果不存在，则回退到站点设置：

```js
// 设置 user、siteSettings 和 target 变量：
const user = api.getCurrentUser()
const siteSettings = api.container.lookup('site-settings:main');
let target = siteSettings.default_other_external_links_in_new_tab ? "_blank" : ""; 

if (user) { // 如果用户存在，则根据用户选项设置 target
 target = user.user_option?.external_links_in_new_tab ? "_blank" : ""
} 

// 修改创建链接的 if 语句以使用 target 变量：
if (userFields && userFields[userFieldId]) {
  const url = "http://myawesomewebsite.com/user/" + userFields[userFieldId];
  const link = `<a href="${url}" target="${target}">${url}</a>`;
  return Ember.Object.create({ link, name: externalUserIdField.get('name') });
} else {
  return null;
}

```

---

<div class="post-metadata">

**Author:** ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)\
**Post date:** [2023年三月16日 00:54 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/9 "2023-03-16T00:54:08Z")

</div>

完美运行，谢谢！

---

<div class="post-metadata">

**Author:** ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)\
**Post date:** [2023年四月15日 00:54 UTC](https://meta.discourse.org/t/how-to-leverage-the-open-all-external-links-in-a-new-tab-setting-in-site-customizations/258174/10 "2023-04-15T00:54:18Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
