我最近进入了nativescript,我遇到了一个我似乎无法解决的问题。
我想要完成的只是打开一个基本的WebView并设置一个外部URL来加载,例如stackoverflow.com。
我正在使用 Android api 17
在模拟器上运行此功能app.js
var application = require("application");
application.mainModule = "main-page";
application.cssFile = "./app.css";
application.start();
主要-page.js
var vmModule = require("./main-view-model");
var webViewModule = require("ui/web-view");
var webView = new webViewModule.WebView();
function pageLoaded(args) {
var page = args.object;
var web = page.getViewById(webViewModule.WebView,"webView");
web.url="http://google.com";
}
exports.pageLoaded = pageLoaded;
主要-page.xml
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
<StackLayout>
<WebView id="webView" colSpan="4" row="2"/>
</StackLayout>
</Page>
我还检查了INTERNET权限是否设置为application,是,启用了它。
应用程序也停止工作,命令
tns运行android --emulator
在模拟器上成功安装并运行应用程序后,它只会输出大量输出。
你能帮助我理解究竟应该如何运作吗?
答案 0 :(得分:6)
由于某种原因你不能将WebView放在StackLayout 中,它根本就不显示。请改用GridLayout。这里有一个GitHub issue。
Android模拟器真的很健谈,但在该日志中的某个地方(最有可能最终),几乎可以肯定是错误的堆栈跟踪。如果您正在运行Mac,那么iOS模拟器就不那么健谈了。
那就是说,让我们修复你的代码。下面是工作代码,注释显示代码的更改。
<强> app.js 强>
没问题,看起来应该这样!
主要-page.js 强>
/**
* Do you actually have a file called 'main-view-model.js' in the same
* folder as this file? In any case, it's not used in your example code
* so I commented it out.
*/
//var vmModule = require("./main-view-model");
var webViewModule = require("ui/web-view");
/**
* Here you are creating a NEW webview. If you want to, you can create
* element dynamically and then attach them to the view. However, in your
* example you already have a webview in your xml file so there's no need
* to create a new one.
*/
//var webView = new webViewModule.WebView();
function pageLoaded(args) {
var page = args.object;
/**
* Corrected the line below. What you're doing here is pretty
* much equal to $('#webView') in jQuery. You're selecting
* an element
*/
var web = page.getViewById("webView");
//var web = page.getViewById(webViewModule.WebView,"webView");
web.url = "http://google.com";
}
exports.pageLoaded = pageLoaded;
主要-page.xml 强>
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
<GridLayout>
<WebView id="webView" />
</GridLayout>
</Page>
所以我在这里做了几件事。首先,我删除了colSpan="4" row="2"
。这两个参数仅用于GridLayouts,您正在使用StackLayout。 然而你可以看到我已经将StackLayout更改为GridLayout。原因是由于某种原因你不能将WebView放在StackLayout中,它根本就不显示。这里有一个GitHub issue。
如果您只想创建一个显示Google的WebView,则可以直接在XML中设置url
属性。如果你这样做,你甚至不需要Javascript。当然,如果你想动态设置网址,你需要从Javascript。
设置url属性的示例:
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
<GridLayout>
<WebView id="webView" url="http://www.google.com" />
</GridLayout>
</Page>
答案 1 :(得分:1)
WebView目前不推荐使用属性网址。改为使用src。