我找到了解决办法。
首先,您需要为嵌入式网站使用 https 网址。原因是解决方案包括postMessage和invokeScriptAsync。
首先,我的应用中的标记看起来像这样,有一个用于应用的 web 视图和一个用于 PayPal 弹出窗口的 web 视图。
<x-ms-webview id="webview" src="https://myapp"></x-ms-webview>
<div id="paypalContainer">
<div class="paypal-header"><button id="paypalClose" type="reset">Close</button></div>
<div class="paypal-body"><x-ms-webview id="paypalWebView" src="about:blank"></x-ms-webview></div>
</div>
然后,当网络应用准备好使用 PayPal 时,我使用 window.external.notify 向 Windows 应用商店应用发送消息。
if (window.external && 'notify' in window.external) {
window.external.notify(JSON.stringify({ action: 'paypal' }));
}
windows 商店应用监听 Script Notify 事件并显示 paypalWebView。
webview.addEventListener("MSWebViewScriptNotify", scriptNotify);
function scriptNotify(e) {
var data = JSON.parse(e.value);
if (data.action === "paypal") {
var loading = document.getElementById("loading-indicator");
var container = document.getElementById("paypalContainer");
var paypalWebView = document.getElementById("paypalWebView");
var paypalClose = document.getElementById("paypalClose");
if (paypalWebView.src === "about:blank") {
paypalWebView.addEventListener('MSWebViewNavigationCompleted', function (e) {
loading.classList.remove('loading');
var successUrl = '/paypal/success';
if (event.target.src.indexOf(successUrl) !== -1) {
var operation = webview.invokeScriptAsync("updateUser");
operation.oncomplete = function () {
(new Windows.UI.Popups.MessageDialog("Your account is refreshed", "")).showAsync().done();
};
operation.start();
}
});
paypalWebView.addEventListener('MSWebViewNavigationStarting', function (e) {
console.log("Started loading");
loading.classList.add('loading');
});
paypalClose.addEventListener('click', function () {
container.classList.remove("visible");
});
}
paypalWebView.src = "https://myapp/paypal/";
container.classList.add("visible");
}
}
所以,基本上,当脚本通知事件触发时,我将发送的 json 字符串解析为一个对象并检查它是什么类型的操作。如果这是我第一次运行它,我会设置一些导航事件处理程序来检查 Web 视图是否到达成功页面。如果有,我会使用 incokeScriptAsync 让 Web 应用程序知道我们已完成,以便它可以刷新用户帐户以进行新付款。
我认为您可以使用类似的解决方案进行身份验证,并在身份验证后检查您的返回 URL。
希望这会有所帮助!