4

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

4

4 回答 4

7

这是我的 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>

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

于 2015-09-04T14:32:13.830 回答
5

您应该能够看到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.
    });
}
于 2015-09-04T08:37:42.683 回答
2

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

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。您也可以通过挖掘他们的 API 参考然后将其转换为 {N} 适用来创建 iOS 版本。

于 2017-08-15T00:35:14.397 回答
0

在 IOS 上,您可以这样做:

args.object.ios.stringByEvaluatingJavaScriptFromString('YOUR_JAVASCRIPT_CODE');
于 2017-10-16T15:20:14.687 回答