Nativescript Webview回调uri

时间:2015-09-04 02:52:47

标签: authentication oauth-2.0 nativescript

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

4 个答案:

答案 0 :(得分: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>

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

答案 1 :(得分:5)

您应该可以观看urlProperty的更改。 E.g。

鉴于你有一个看起来像这样的观点:

<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.
    });
}

答案 2 :(得分:1)

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

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参考创建iOS版本,然后将其转换为{N}适合。

答案 3 :(得分:0)

在IOS上你可以这样做:

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