Nativescript裸webview似乎不起作用

时间:2015-05-27 12:20:03

标签: javascript android nativescript

我最近进入了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

在模拟器上成功安装并运行应用程序后,它只会输出大量输出。

你能帮助我理解究竟应该如何运作吗?

2 个答案:

答案 0 :(得分:6)

tl; dr为其他遇到WebView问题的人

由于某种原因你不能将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。