首页 > 解决方案 > Excel 插件:单击指向不同域的链接有效,但使用 JS 更改位置无效

问题描述

我想将我的加载项重定向到不同域中的 URL。

我将域添加到清单中,如下所示:

<AppDomains>
   <AppDomain>https://another.domain.com</AppDomain>
</AppDomains>

而且我可以验证它是否有效,因为我可以像这样向我的插件添加一个普通链接:

<a href="https://another.domain.com/something">Click me</a>

然后我点击那个链接,一切都很好。

但是,如果我尝试像这样以编程方式更改位置:

window.location.href = "https://another.domain.com/something";

然后加载项停止工作,仅显示错误屏幕,显示“加载项错误对不起,我们无法加载加载项。请确保您有网络和/或互联网连接。一旦你点击“重试”重新上线。”

这是预期的行为吗?如何将我的加载项重定向到不同的域?这在 IE11 webview 中可以正常工作,但它不适用于 Chromium webview。

标签: exceloffice-jswebview2

解决方案


我不是 Office 加载项方面的专家,但据我了解,当您WebView2在 Office 加载项中使用时,WebView2窗口在IFRAME中运行,而主文档是内部 Office 窗口。

现在,当您通过CoreWebView2.ExecuteScriptAsync(String)方法注入脚本时,这些脚本将根据文档注入主文档:CoreWebView2.ExecuteScriptAsync(String)

从 WebView 中呈现的当前顶级文档中的 javaScript 参数运行 JavaScript 代码。

这意味着window将指向内部 Office 主窗口,而不是您的WebView2. 当您尝试导航此内部窗口时,它会崩溃。相反,当您的链接中有链接时,WebView2它会导航WebView2iframe。

我看到了 2 个解决方案:

1.获取Iframe窗口对象的访问权限:

window.frames[0].location.href = "https://another.domain.com/something";

在这里,我假设只有一个 iframe。否则遍历window.frames.

2. 将您的 javascript 直接加载到您的文档中:

使用以下命令将脚本标签添加到您的<head>元素:

<script src="https://example.com/script.js"><script>.

现在window将是WebView2窗口。这需要您控制 html。如果你这样做,我推荐这种方法。


推荐阅读