Nativescript 裸 webview 似乎不起作用
Nativescript bare webview doesnt seem to work
我最近接触了 nativescript,但我遇到了一个似乎无法解决的问题。
我想要完成的是打开一个基本的 WebView 并设置一个外部 url 来加载,例如 whosebug.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 权限是否设置为应用程序,是的,它已启用。
应用程序也停止工作,命令
tns 运行 android --模拟器
在模拟器上成功安装和 运行 应用程序后,它只是垃圾邮件,输出很多。
你能帮我理解到底应该如何工作吗?
tl;对于其他有 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。当然,如果你想动态设置 url 你需要从 Javascript.
设置示例url 属性:
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
<GridLayout>
<WebView id="webView" url="http://www.google.com" />
</GridLayout>
</Page>
属性 url 当前已弃用 WebView。请改用 src。
我最近接触了 nativescript,但我遇到了一个似乎无法解决的问题。
我想要完成的是打开一个基本的 WebView 并设置一个外部 url 来加载,例如 whosebug.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 权限是否设置为应用程序,是的,它已启用。
应用程序也停止工作,命令
tns 运行 android --模拟器
在模拟器上成功安装和 运行 应用程序后,它只是垃圾邮件,输出很多。
你能帮我理解到底应该如何工作吗?
tl;对于其他有 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。当然,如果你想动态设置 url 你需要从 Javascript.
设置示例url 属性:
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
<GridLayout>
<WebView id="webView" url="http://www.google.com" />
</GridLayout>
</Page>
属性 url 当前已弃用 WebView。请改用 src。