【发布时间】:2018-05-03 09:58:14
【问题描述】:
由于我对这个有点疯狂,我决定再试一次并在这里发布。
所以...
我有一个简单的 Swift/Cocoa 应用程序,其中包含 WKWebView。
我加载了一个本地 HTML 文件(连同其余的 .css/.js 依赖项一起被复制到 /web 文件夹内的包中)。
这是完整的代码:
<!DOCTYPE html>
<html>
<head>
<title>IBAN Validator</title>
<meta name="viewport" content="width=device-width"/>
<meta charset="UTF-8">
<link href="style/font-awesome.min.css" type="text/css" rel="stylesheet"/>
<link href="style/electriq.css" type="text/css" rel="stylesheet"/>
<link href="style/custom.css" type="text/css" rel="stylesheet" />
</head>
<body>
<!-- window/ -->
<div class="window">
<div class="content" style="text-align: center">
<div class="panel">
<input id="iban" type="text" style="text-align:center;"><br/>
<div style="position: relative; max-width: 150px; width: 100%; margin: 0 auto">
<a id="validateButton" href="#" class="button" style="width:150px;">Validate</a>
<span id="resultValid" style="position:absolute; left: calc(100% + 20px); top: 10%; color: green; font-size: 20px; display:none;"><i class="fa fa-check"></i></span>
<span id="resultInvalid" style="position:absolute; left: calc(100% + 20px); top: 10%; color: red; font-size: 20px; display:none;"><i class="fa fa-close"></i></span>
</div>
</div>
</div>
</div>
<!-- /window -->
<div id="loader_overlay" style="padding-top:10%">
<i class="fa fa-circle-o-notch fa-spin fa-3x fa-fw"></i><br/>
</div>
<!-- scripts/ -->
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
<script src="jquery.min.js" type="text/javascript"></script>
<script>
if (typeof window.jQuery !== 'undefined') {
window.document.getElementById("loader_overlay").innerHTML += ".";
} else {
window.document.getElementById("loader_overlay").innerHTML += "x";
}
</script>
<script src="handlebars.min.js" type="text/javascript"></script>
<script>
if (typeof window.Handlebars !== 'undefined') {
window.document.getElementById("loader_overlay").innerHTML += ".";
} else {
window.document.getElementById("loader_overlay").innerHTML += "x";
}
</script>
<script src="bridgecommander.js" type="text/javascript"></script>
<script>
if (typeof window.BridgeCommander !== 'undefined') {
window.document.getElementById("loader_overlay").innerHTML += ".";
} else {
window.document.getElementById("loader_overlay").innerHTML += "x";
}
</script>
<script src="iban.js" type="text/javascript"></script>
<script>
if (typeof window.IBAN !== 'undefined') {
window.document.getElementById("loader_overlay").innerHTML += ".";
} else {
window.document.getElementById("loader_overlay").innerHTML += "x";
}
</script>
<!-- <script src="app.js" type="text/javascript"></script> -->
<script>
// Generated by CoffeeScript 2.0.2
var doValidate;
window.appLoaded = true;
window.document.getElementById("loader_overlay").innerHTML += ".";
BridgeCommander.call("echo", "Before: onload");
window.document.getElementById("loader_overlay").innerHTML += ".";
window.onload = function() {
BridgeCommander.call("echo", "Inside: onload");
document.getElementById("loader_overlay").style.display = 'none';
return $("#validateButton").on("click", doValidate);
};
window.document.getElementById("loader_overlay").innerHTML += ".";
BridgeCommander.call("echo", "After: onload");
doValidate = function() {
var iban, valid;
iban = $("#iban").val();
valid = IBAN.isValid(iban);
if (valid) {
$("#resultValid").show();
$("#resultInvalid").hide();
$("#validateButton").removeClass("invalid").addClass("valid");
BridgeCommander.call("echo", `Validating: ${iban}, Result: valid`);
} else {
$("#resultValid").hide();
$("#resultInvalid").show();
$("#validateButton").removeClass("valid").addClass("invalid");
BridgeCommander.call("echo", `Validating: ${iban}, Result: invalid`);
}
setTimeout(function() {
$("#validateButton").removeClass("valid").removeClass("invalid");
$("#resultValid").hide();
return $("#resultInvalid").hide();
}, 3000);
return false;
};
window.document.getElementById("loader_overlay").innerHTML += ".";
if (typeof window.appLoaded !== 'undefined') {
window.document.getElementById("loader_overlay").innerHTML += ".";
} else {
window.document.getElementById("loader_overlay").innerHTML += "x";
}
</script>
<script>if (window.module) module = window.module;</script>
<!-- /scripts -->
</body>
</html>
重要提示: 这里(意思是在我的 Mac 上 - 以及我尝试过的每个人的 10.3.1 的 Mac)一切正常。当我将完全相同的二进制文件上传到 App Store 进行审查时,我不断收到相同的“错误”屏幕截图,这表明我最后一个 <script></script> 块中的任何代码都没有被执行。 (在window.appLoaded = true 部分之后)。
会发生什么?我确实尝试过任何方法来调试它(因此,无数的 window.document.getElementById 事情,添加点以确保一切正常),但仍然没有。
如您所见,我正在加载几个脚本(根据我的测试加载正常),并且我还有几段内联 JS 代码(仍然可以正常工作)。除了最后一个! (无论如何,即使来自外部文件,它似乎也拒绝加载......)
再次,我考虑过缓存某事,我不知道,但我提醒您,它 - 显然 - 除了审查团队的机器外,它在任何地方都可以工作:S
欢迎任何想法!
P.S.如果有什么不清楚的地方,请随时问我
更新:(2017 年 11 月 28 日)用一个简单的 - 老式 - WebView 尝试了整个事情(以防它与 WKWebView 有关),仍然是我的应用程序被拒绝。或者更准确地说,我的应用程序(完全一样的版本,一切都一样)在任何地方都运行良好,除了审查它的人。
【问题讨论】:
-
你能检查二进制文件是否包含所有需要的资源吗?
-
包含您提到的错误屏幕截图是否相关?附带说明一下,我通常会看到评论是在 iPad 上完成的(如果应用程序不是通用的,则在兼容模式下),所以请确保您也已经在它们上进行了测试。
-
@paulvs 截图只是一个加载图标,下方有 4 个点。意味着在打印这四个点后调试停止。此外,该应用程序是 macOS 应用程序。
-
如果您的代码必须仅适用于这些操作系统之一,您应该添加标签 osx 或 macOS-sierra o high-sierra。用你很少的信息来重现你的错误真的很难。你使用什么版本的 Swift?另外,什么是BridgeCommander?是第三方库吗?人们应该能够重现您的错误。
-
创建外部 javascript 文件。找到缓存的 .js 文件比查找缓存的 .html 文件要好得多。
标签: javascript swift macos cocoa webview