excel - 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。
解决方案
我不是 Office 加载项方面的专家,但据我了解,当您WebView2
在 Office 加载项中使用时,WebView2
窗口在IFRAME中运行,而主文档是内部 Office 窗口。
现在,当您通过CoreWebView2.ExecuteScriptAsync(String)
方法注入脚本时,这些脚本将根据文档注入主文档:CoreWebView2.ExecuteScriptAsync(String):
从 WebView 中呈现的当前顶级文档中的 javaScript 参数运行 JavaScript 代码。
这意味着window
将指向内部 Office 主窗口,而不是您的WebView2
. 当您尝试导航此内部窗口时,它会崩溃。相反,当您的链接中有链接时,WebView2
它会导航WebView2
iframe。
我看到了 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。如果你这样做,我推荐这种方法。
推荐阅读
- javascript - Axios 从 dart 的渡槽获取令牌
- google-cloud-platform - 如何将我的 gcloud 用户凭据安全地放入容器中,并在本地测试时使用它们来模拟服务帐户?
- php - Powershell 加密和 PHP 解密字符串问题
- java - 使用 JdbcBatchItemWriter 在 mysql db 中保存时值更改
- c - xv6 在哪里实现 fifo 和 lifo
- c# - 如何从 blazor 中的 EventCallback 获取返回值?
- nginx - Nginx 负载均衡器异常
- python - 当我尝试运行我的子程序代码时,我的屏幕出现故障
- android - 如果我从本机 Android 应用程序读取联系人,我是否应该获得 READ_CONTACTS 权限?
- javascript - 未捕获的类型错误:“(函数调用)不是函数”