所以我设置了一个页面,并希望使用应用程序与网页进行交互。
我可以通过侦听某些网址从页面获取数据,并阻止网页进行网页浏览。
当我获得此数据时,我会导航到包含已处理列表的新页面。
然后当我单击后退按钮返回浏览器页面时,即使已经设置了URL,浏览器也会重新加载。
非常简单的设置:
的xml:
<Page loaded="loaded" class="page">
<Page.actionBar>
<ActionBar title="Cost" icon="" class="action-bar">
</ActionBar>
</Page.actionBar>
<WebView id="mywebview" />
</Page>
JS:
var checkPageLoad = function(event) {
console.log(event.url);
if (event.url.indexOf("mydomain") < 0) {
if (app.ios) {
event.object.ios.stopLoading();
} else if (app.android) {
event.object.android.stopLoading();
}
}
if (event.url.indexOf('custom://mydomain.com') === 0 ) {
farm(event.url.replace("custom://mydomain.com", ""));
}
};
exports.loaded = function(args) {
page = args.object;
var web = page.getViewById("mywebview");
web.on(webView.WebView.loadStartedEvent, checkPageLoad);
if(web.android) { // in IOS android will be undefined
web.android.setInitialScale(1);
web.android.getSettings().setLoadWithOverviewMode(true);
web.android.getSettings().setUseWideViewPort(true);
}
if (web.src != "http://myurl.com") {
web.src = "http://myurl.com";
}
};
function farm(item) {
var navigationOptions={
moduleName:'./list/list',
context:{info: item},
animated: true,
transition: {
name: "slide",
duration: 380,
curve: "easeInOut"
}
};
var topmost = frameModule.topmost();
topmost.navigate(navigationOptions);
}
所以,当我按下&#34;列表中的后退按钮&#34;页面,webview在重新加载时是白色的。
任何想法?它与frameModule导航有关吗?
=============================================== =
更新6/29/17:
我已针对此问题实施了解决方法。它不是最好的,但它使它工作满意。
要解决方法:使用NativeScripts page
的{{1}}功能。
http://docs.nativescript.org/core-concepts/navigation#modal-pages
这会创建一个弹出窗口,当按下后退时会关闭弹出窗口而不重新加载webview。
为了实现,我不得不改变我的网页设置方式。
一次只能打开1个模态页面,因此每个视图都需要与webview页面进行通信。
页面也有一个事件showModal()
,它将上下文与框架模块稍有不同。
您必须将发送的回调存储到模态页面,并在模态页面关闭时调用它。
仍然希望只使用帧模块设置。
答案 0 :(得分:1)
后退按钮使最后一个视图从onPause
状态转换为onResume
,然后转换为running
状态。如果您有权访问onResume
事件,则可以覆盖它或处理它,以便在按下后退时不会发生重新加载。例如,你可以有一个布尔值,例如isLoadFinished
(您可以在加载页面时将其设置为true
)并在onStart
或onResume
个事件被触发时进行检查,以防止调用webview.load
isLoadFinished
为true
。
我不是nativeScript
开发人员,因此我提出了解决方案的概念。我在nativeScript
的Android应用生命周期事件中找到了this guide,我猜它可能对你有帮助。
答案 1 :(得分:0)
这was a bug in NativeScript's tns-core-modules。
在公开发布版(可能是3.2版)中可以使用修补程序之前,您可以像这样使用tns-core-modules
的@next版本:
tns plugin remove tns-core-modules
npm i tns-core-modules@next --save