Nativescript WebView,防止在Android上导航时重新加载
因此,我设置了一个页面,并且希望使用应用程序与网页进行交互。Nativescript WebView,防止在Android上导航时重新加载
我能够通过侦听某些URL从页面获取数据,并阻止该页面从Web浏览它们。
当我得到这些数据时,我导航到一个带有处理列表的新页面。
然后,当我点击返回按钮返回浏览器页面时,浏览器重新加载,即使其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);
}
所以,当我按下从 “列表” 页面后退按钮,web视图是虽然白重载。
任何想法?它是否与frameModule导航有关?
============================================== ==
更新17年6月29日:
我实现了一个变通针对此问题。它不是最好的,但它使它工作令人满意。
解决方法:使用NativeScripts page
的showModal()
函数。 http://docs.nativescript.org/core-concepts/navigation#modal-pages
这会创建一个弹出窗口,当按下后退时,它将关闭弹出窗口而不重新加载webview。
为了实施,我不得不改变我的页面设置方式。
只有一个模式页面可以一次打开,因此每个视图都需要与webview页面进行通信。
页面还有一个事件onShownModally
,它使框架模块的上下文略有不同。
您必须存储您发送到模态页面的回调,并在模态页面关闭时调用它。
尽管如此,仍然想用一种方式使用框架模块设置。
This was a bug in NativeScript's tns-core-modules。
直到修复将在一个公开发行(大概在3.2?),你可以使用的tns-core-modules
的@next版本是这样的:
tns plugin remove tns-core-modules
npm i [email protected] --save
后退按钮使中转最后视图从状态onResume
然后running
状态。如果您有权访问onResume
事件,则可以覆盖它或对其进行处理,以便在按下后退时不会发生此重新加载。例如,你可以有一个布尔值,例如isLoadFinished
(您可以在加载页面完成后将其设置为true
),并在onStart
或onResume
事件被触发时检查它,以防止调用webview.load
如果isLoadFinished
是true
。
我不是nativeScript
开发人员,所以我提出了解决方案的概念。我在nativeScript
的Android应用生命周期事件中发现了this guide,我想它可能会对您有所帮助。
嗯,我把所有的听众放在一起,唯一被触发的是'activityBackPressed'。我会仔细研究,看看我可以访问哪些其他活动。 –
你已经找到了一个解决方案? –
不,只是我周围的工作更新了帖子。 –
您可能想阅读:https://github.com/NativeScript/NativeScript/issues/4615#issuecomment-320937348:D –