在Windows Phone 7上,在PhoneGap中包含本地JavaScript

3
我是一位有用的助手,可以为您进行翻译。以下是需要翻译的内容:

我有一个 PhoneGap 应用程序,旨在适用于多个移动平台。我正在使用 jQuery Mobile 从 Internet 上的外部页面加载动态 HTML 内容。问题出现在 Windows Phone 7 系统上。

这是我从外部页面获取的内容,其中脚本标签的 URL 已经替换为从手机加载而不是从网络加载以节省带宽:

<script type="text/javascript" charset="utf-8" src="x-wmapp1:/app/www/test.js"></script>

这在Android、iPhone甚至BlackBerry上都可以正常工作,当我用相应的替代方案(例如,在Android上使用file:///android_asset/www/)替换了x-wmapp1:部分时。然而,在Windows Phone 7上似乎根本不起作用。
当我尝试通过$.getScript函数加载相同的URL时,即使我只使用相对路径加载它,它始终返回404错误。
有什么建议吗?

你尝试过使用正斜杠“/”的Windows风格路径吗? - Kiran
好的,那个观点很有道理...我会在周一检查并看看是否可行,谢谢 :) - Zathrus Writer
恭喜 Kiran。它有效了。我通过提供本地 URL(如 dynamicJSload(\js\test.js))来测试 dynamicJSload url 函数,它有效了。我的 HTML 文件和 JS 文件夹在同一路径下。 - Apostolos Emmanouilidis
@Tolis,你尝试过使用PhoneGap 1.8.1吗?对我来说,它不起作用,而且使用jQuery的getScript时,我会得到一个“无效参数”的错误。 - Zathrus Writer
2个回答

4
尝试将您的js添加到GapSourceDictionary.xml中。
GapSourceDictionary.xml XML文件列出了所有HTML应用程序资源。当应用程序启动时,此XML文件被读取,并且列表中包含的所有文件都会添加到隔离存储中,以便可以通过WebBrowser控件提供服务。
例如,您的GapSourceDictionary.xml应该像这样:
    <?xml version="1.0" encoding="utf-8"?>
    <GapSourceDictionary>
        <FilePath Value="www\index.html"/>
        <FilePath Value="www\test.css"/>
        <FilePath Value="www\phonegap-1.3.0.js"/>
        <FilePath Value="www\js\custom.js"/>
    </GapSourceDictionary>

请在您的HTML文件中使用相对路径来指定外部脚本文件的URL:
    <script type="text/javascript" src="./js/custom.js"></script>

编辑

我成功地使用以下步骤动态加载了一个新的本地JavaScript文件。这个测试在PhoneGap 2.0上成功通过。不幸的是,在PhoneGap 1.8.1上,相同的测试失败了。

下面是加载JS动态的源代码:

function dynamicJSload(url)
{
    var script = document.createElement('script');
    script.type = "text/javascript";
    if (script.readyState)
    {
        script.onreadystatechange = function(){
            if (script.readyState == "complete" || script.readyState == "loaded"){
                script.onreadystatechange = null;
            }
        };
    }
    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

在我的页面中,我这样调用函数:
  dynamicJSload("js\\test.js");

我希望这能为您提供帮助。

你可以提供一下文件夹结构的信息吗?主项目文件夹里应该有一个名为www的文件,其中包含所有HTML、JavaScript、CSS和图片。 - Apostolos Emmanouilidis
我成功地在演示页面中加载了一个新的JS。测试是使用Windows Phone 7模拟器的IE浏览器进行的。我将更新我的帖子。 - Apostolos Emmanouilidis
好的,我想我们现在已经偏离了主题,而我没有意识到,很抱歉...问题不是通过AJAX加载外部页面,而是从此问题中发布的URL加载内部JavaScript文件...我也尝试过你的dynamicJSload()函数来包含一个内部文件,但它与jQuery的getScript()一样失败了。 - Zathrus Writer
为了明确起见 - 我使用 $.ajax() 调用来加载外部 PHP 页面... 从这个 $.ajax() 调用返回的源代码包含带有 JavaScript 的 SCRIPT 标签,这些标签由 jQuery 评估并包含在页面中... 这些 SCRIPT 标签中有内部 URL(请参见问题),应该从实际应用程序的 www 文件夹中加载它们,而不是从互联网上加载 - 这就是失败的地方。 - Zathrus Writer
谢谢。不幸的是,我复制粘贴时犯了一个错误。实际上对我有用的代码是 dynamicJSload(js\test.js) 而不是 **dynamicJSload(\js\test.js)**。我的 HTML 文件和包含 js 文件的 js 文件夹在同一路径下,都在 HTML 文件夹下。一旦我有空闲时间,我将更新帖子,并提供几个 PhoneGap 版本的结果。 - Apostolos Emmanouilidis
显示剩余8条评论

1
请尝试使用Windows路径,例如file:\\\。由于文件系统期望使用\作为目录分隔符,这很可能是问题的原因。

文件协议实际上是file:///, 而不是file:\\ ... 不幸的是,提到的解决方案对我没有起作用,抱歉。 - Zathrus Writer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接