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;
});
我们可以 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;
});