在appcelerator/titanium mobile中,当在webview中使用本地html时,如何从应用程序数据目录加载图像并引用

发布于 2024-12-19 23:53:03 字数 735 浏览 2 评论 0原文

在 web 视图中显示的本地 html 文件中,我希望能够从应用程序数据目录调用图像。我在我的 html 中尝试了几个 src 选项,但似乎都不起作用。

我正在从应用程序数据目录成功加载 html 文件,如下所示:

var win = Ti.UI.currentWindow;

var rootDir = Ti.Filesystem.getExternalStorageDirectory();
var webUrl = rootDir + 'index.html';

var webview =  Ti.UI.createWebView({
width:'100%',
height:'100%',
url:webUrl
});

win.add(presWebView)

虽然页面在 web 视图中正确打开,但所有图像 url 均不起作用。

<image src="appdata:///image.jpg"/>
<image src="app:///image.jpg"/>
<image src="file:///image.jpg"/>
<image src="appdata://image.jpg"/>
<image src="app://image.jpg"/>
<image src="app://image.jpg"/>

这个问题也延伸到链接,无论我如何尝试引用它们,webview 都会告诉我页面不会退出。

In a local html file, that is displayed in a webview, I want to be able to call an image from the application data directory. I have tried several src options in my html, but none seem to work.

I am loading the html file from the application data directory successfully like this:

var win = Ti.UI.currentWindow;

var rootDir = Ti.Filesystem.getExternalStorageDirectory();
var webUrl = rootDir + 'index.html';

var webview =  Ti.UI.createWebView({
width:'100%',
height:'100%',
url:webUrl
});

win.add(presWebView)

Although the page opens in the webview correctly, all the image urls are not functional.

<image src="appdata:///image.jpg"/>
<image src="app:///image.jpg"/>
<image src="file:///image.jpg"/>
<image src="appdata://image.jpg"/>
<image src="app://image.jpg"/>
<image src="app://image.jpg"/>

this problem also extends to links, no matter how I try to reference them the webview tells me the page does not exit.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寻找一个思念的角度 2024-12-26 23:53:03

我已经解决了。

您必须获取 ApplicationDataDirectory oExternalStorageDirectory,
然后使用(文件对象的).nativePath 属性,您可以动态获取相对路径。

var file = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory(), 'test/1.html'); enter 

mywebview = Ti.UI.createWebView({ backgroundColor: 'white', url: file.nativePath });

I've solved it.

You must obtain ApplicationDataDirectory o ExternalStorageDirectory,
then with .nativePath property (of the file object) you can obtain your relative path dynamically.

var file = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory(), 'test/1.html'); enter 

mywebview = Ti.UI.createWebView({ backgroundColor: 'white', url: file.nativePath });
恋你朝朝暮暮 2024-12-26 23:53:03

我已经管理了一个特定的解决方案,通过将 webview url 从基于其与外部存储目录的相对位置的地址更改为绝对路径,使图像和链接在我的本地 html 文件中正常工作:

var webUrl = "file:///mnt/sdcard/..."

var webview =  Ti.UI.createWebView({
width:'100%',
height:'100%',
url:webUrl
});

win.add(presWebView);

只要 url 是绝对路径 html 中的所有链接都可以是相对的,例如

显然,最好动态获取外部存储目录,因此如果有人知道一种方法可以在不破坏 html 中的链接的情况下执行此操作,我将很乐意听到。

I have managed a partical solution which gets both the images and the links working correctly in my local html file by changing the webview url from an address based on its relative position to the externalstorage directory, to an absolute path:

var webUrl = "file:///mnt/sdcard/..."

var webview =  Ti.UI.createWebView({
width:'100%',
height:'100%',
url:webUrl
});

win.add(presWebView);

As long as the url is an absolute path all the links in the html can be relative e.g.

Obviously it would be preferable to get the external storage directory dynamically, so if anyone knows a way to do this without breaking the links in the html I would be keen to hear.

月亮是我掰弯的 2024-12-26 23:53:03

在你的Android目录/tools中,有一个名为DDMS的小程序。如果您打开它,单击您的模拟器,然后在顶部菜单中单击“文件管理器”,您可以看到可以访问的所有路径

"file://"

例如:

var imgPath = "file://mnt/sdcard/uk.co.yourappid/test.jpg";

我现在刚刚在 WebView 中使用此功能:

Ti.App.addEventListener('snagr:plan:loadImage', function(e) {
            $('#plan-image').css({
                background: "url(" + e.path + ") top left no-repeat",
                width: e.width,
                height: e.height
            });
        });

希望这会有所帮助!

In your Android directory /tools, there is a little program called DDMS. If you open that up, click on your emulator then in the top menu, click File Manager you can see all the paths that

"file://"

Can access..

So for example:

var imgPath = "file://mnt/sdcard/uk.co.yourappid/test.jpg";

I have just got this working in a WebView now:

Ti.App.addEventListener('snagr:plan:loadImage', function(e) {
            $('#plan-image').css({
                background: "url(" + e.path + ") top left no-repeat",
                width: e.width,
                height: e.height
            });
        });

Hope this helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文