【问题标题】:Include local JavaScript within PhoneGap on Windows Phone 7在 Windows Phone 7 上的 PhoneGap 中包含本地 JavaScript
【发布时间】:2012-08-28 14:46:41
【问题描述】:

我有一个 PhoneGap 应用程序,专为在多个移动平台上工作而设计。我正在使用 jQuery Mobile 从 Internet 上的外部页面加载动态 HTML 内容。有问题的系统是 Windows Phone 7。

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

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

当我将 x-wmapp1: 部分替换为相应的对应部分(例如 Android 上的 file:///android_asset/www/)时,这在 Android、iPhone 甚至黑莓上都可以正常工作。但是,在 Windows Phone 7 上它似乎根本不起作用。

当我尝试通过 $.getScript 函数加载相同的 URL 时,它总是返回 404 错误,即使我尝试仅使用相对路径加载它。

有什么建议吗?

【问题讨论】:

  • 你试过使用正斜杠\'s的windows风格路径吗?
  • 不,好点...将在星期一检查并查看是否有效,谢谢 :)
  • 恭喜基兰。有用。我通过提供像 dynamicJSload(\\js\\test.js) 这样的本地 URL 测试了 dynamicJSload url 函数,并且它有效。我的html文件和js文件夹在同一个路径。
  • @Tolis 您是否尝试过通过 PhoneGap 1.8.1 执行此操作?对我来说,它不起作用,并且使用 jQuery 的 getScript,我得到一个“无效参数”错误

标签: windows-phone-7 jquery-mobile cordova


【解决方案1】:

尝试在 GapSourceDictionary.xml 中添加你的 js。

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");

希望对你有帮助。

【讨论】:

  • 感谢您的回答...我已经在 GapSourceDictionary.xml 文件中有这些文件,不幸的是,相对路径也给了我一个拒绝访问错误
  • 您能提供一些有关文件夹结构的信息吗?你应该在主项目的文件夹中有一个 www 文件,这个文件应该包含所有的 HTML、JavaScript、CSS 和图像。
  • 如果通过JQ AJAX进行动态HTML内容加载,请确保已将dataType设置为html(dataType: "html")。 IE mobile 需要的正是您设置的数据类型,并且在数据类型错误的情况下不会接收到内容。
  • 我将很快使用从 jQuery 论坛检索到的解决方法来更新我的答案。
  • 我成功地在演示页面中加载了一个新的 JS。该测试是使用 Windows Phone 7 Emulator 的 IE 浏览器进行的。我会更新我的帖子
【解决方案2】:

请尝试使用 file:\\\ 之类的 Windows 路径。由于文件系统需要 \ 进行目录分离,这是最有可能出现的问题。

【讨论】:

  • 文件协议实际上是 file:///,而不是 file:\\\ ... 不幸的是,上述解决方案对我不起作用,抱歉
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多