Nativescript Webview 回调 uri

Nativescript Webview callback uri

我们可以 post 从外部 url 返回到 nativescript 中的 Web 视图并从 post 返回值吗?这是带有重定向 uri 的 oauth2 流程,用户在本机 webview 中显示网站的外部 link 并从 postback url 获取令牌值。有什么建议或指向 tut 或博客的指针吗?所有主要参与者都对此提供支持,并且它非常适用于 oauth。

您应该能够看到 urlProperty 的变化。例如

鉴于您的视图如下所示:

<Page loaded="loaded">
     <WebView id="myWebView" src="{{ url }}" />
</Page>

然后您可以将观察者附加到该 WebView 并对 URL 属性 的更改做出反应,如下所示:

var webViewModule = require('ui/web-view');

function loaded(args) {
    var page = args.object;
    var webView = page.getViewById('myWebView');
    webView.on(webViewModule.WebView.urlProperty, function (changeArgs) {
        console.dir(changeArgs); 
        // Do something with the URL here.
        // E.g. extract the token and hide the WebView.
    });
}

这是我的 main-page.js 我在 args.url

下的函​​数中获得的所有标记和值
var vmModule = require("./main-view-model");
var webViewModule = require('ui/web-view');
function pageLoaded(args) {

    var page = args.object;
    page.bindingContext = vmModule.mainViewModel;
    var webView = page.getViewById('myWebView');
    debugger;
    //webView.url = 
    webView.on(webViewModule.WebView.loadFinishedEvent, function (args) {
        alert(JSON.stringify(args.url));
    });
    webView.src = vmModule.mainViewModel.url;

}
exports.pageLoaded = pageLoaded;

我的观点是

<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
    <GridLayout>
        <WebView id="myWebView" />
    </GridLayout>
</Page>

它一直写在文档中,我只是没有仔细看。希望对其他人有帮助。

我知道这是旧的。但是下面的代码可以帮助很多人。

YOUR_WEB_VIEW_OBJECT.on(webViewModule.WebView.loadFinishedEvent, function (args) {
    args.object.android.getSettings().setJavaScriptEnabled(true);

    args.object.android.evaluateJavascript('(function() { console.log("LOGS"); return "MESSAGE"; })();', new android.webkit.ValueCallback({
        onReceiveValue: function (result) {
            console.log(result);
        }
    }));
});

此代码目前适用于 Android。您也可以创建 iOS 版本,方法是深入研究他们的 API 参考,然后将其转换为 {N} 合适的版本。

在 IOS 你可以这样做:

args.object.ios.stringByEvaluatingJavaScriptFromString('YOUR_JAVASCRIPT_CODE');

仅作记录,现在这就是您的做法

var webViewNat = this.webView.nativeElement;
this.oLangWebViewInterface = new webViewInterfaceModule.WebViewInterface(webViewNat)
webViewNat.ios.evaluateJavaScriptCompletionHandler(`var myvar = document.getElementById('userNameInput').value = '${getString('Email')}';`, (id, err) => {
  if (err) {
      return err;
  }
 return id;
});