由于我们的一些页面如何工作,JS可以随时注入页面,有时这个JS会关闭当前窗口.问题是我需要将一个事件监听器附加到窗口的onunload,以便可以从窗口返回一个值到父页面.但是因为窗口关闭脚本可能在任何时候被注入,我无法将此事件绑定到onload,因为它的工作方式因此我希望使用DOMContentLoaded,因为该事件将在注入的脚本之前触发.
但是在我的测试中,我无法在创建新窗口的父页面上绑定到DOMContentLoaded.
以下是我目前正在使用的内容:Plunker
我们目前只需要在Chrome中使用它.
我们当前的这种方法就像这样(伪代码):
onButtonClick = function(){
win = window.open(...);
win.onload = function(){
win.onunload = function(){
//Bind some function that will get the window's "return value" and pass it to the parent page
//This will never happen if the window closes itself before the page is done loading
};
};
};
Run Code Online (Sandbox Code Playgroud)
我可以使用DOMContentLoaded来完成我想要的吗?如果是这样,我该如何正确地将它附加到窗口?
注意:创建后,我无法将"onunload"事件直接绑定到窗口.它似乎两次触发"onunload"事件(一旦窗口打开,一次关闭时).如果在我的示例中使用"bindOnCreate"函数,则可以看到这种情况.
当我们的网站遇到内部服务器错误时,我正在尝试收集信息.我们有许多应用程序从未设置正确的错误日志记录,当出现问题时,我们的客户端不会向我们提供最佳信息.我想做的是,当500发生时,我想收集有关问题发生位置的数据,例如:
我使用以下配置在我们的服务器(IIS 7)上设置了自定义错误页面:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="500" />
<error statusCode="500" path="/error.php?code=500" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在那个页面上,我只是var_dump-ing $ _POST和$ _GET,看看这些内容是否有任何内容进入错误页面,但事实并非如此.我对500错误的目标是:
有没有办法收集这些数据并让自定义错误页面看到它?
error.php:
switch($ErrorCode){
case '500':
var_dump($_REQUEST, $_POST, $_GET);
echo "internal server error";
break;
}
Run Code Online (Sandbox Code Playgroud)
在所有情况下,$ _POST都是空的,即使我提交了一个表单来获取此错误并且$ _GET包含此内容(这是有道理的):
array(2) {
["code"]=>
string(3) "500"
["500;http://icom-sbs/test_php"]=>
string(0) ""
}
Run Code Online (Sandbox Code Playgroud)
4/19更新
我玩了一些想法,主要是在会话变量中存储有用的数据.我试图将一些表单数据存储在测试页面上的会话变量中,该变量会产生错误,但它永远不会进入会话.看起来服务器检测到页面上会发生错误,因此它甚至不会在页面上执行任何代码并立即执行错误页面.
我们注意到,有时从AJAX调用结果到控制器操作,JSON结果的情况不正确.如果我们重建我们的解决方案并尝试完全相同的调用,则返回的案例实际上会发生变化 在下面的例子中,密钥的情况已经纠正了一年多,直到现在它已经决定根据一些看似随意的情况开始随机改变.

正如您在上图中所看到的,JSON结果的关键是小写"成功".但是,当我在Chrome控制台中查看结果时,它是一个大写的"成功".这导致我们的JavaScript失败,因为它正在检查小写版本.
是什么造成的?更重要的是,我们如何阻止这种情况?
请参阅下面的更新(11/27)
我有一个模态窗口,它在iframe(ASP webforms应用程序)中使用它的内容启动.我们需要将模式重定向到另一个页面,但由于安全原因(Paypal处理页面),它不能在iframe中.在Chrome和IE标准模式下,我们的代码可以正确地将模式的URL更改为正确的URL.但是,在兼容模式下,重定向会导致使用正确的URL打开新的模式窗口.我们如何阻止它打开一个新窗口并实际重定向?
这是我们目前的代码:
dialog.redirect = function (location, ignoreFrames) {
/// <summary>Redirects the dialog to a new URL</summary>
/// <param name="location" type="String"></param>
/// <param name="ignoreFrames" type="Boolean">If true, the dialog's URL will be changed instead of any parent frame URLs</param>
if (ignoreFrames === undefined) {
ignoreFrames = true;
}
if (ignoreFrames === true) {
if (window.top) {
//Chrome and IE9+
window.top.document.location.replace(location);
} else {
//This was a supposed fix but it did not change the outcome
//<IE8 and compat mode
var …Run Code Online (Sandbox Code Playgroud) 我正在尝试对我创建的类进行单元测试,但大多数类都处理数据库.我已经让非数据库相关的类在本地测试得很好,但是当涉及到使用数据库时,我很难过,特别是远程.该指南显示使用PDO访问似乎被转储到XML文件的本地数据库,所以它对我来说没用,因为我的数据库在Amazon云中并使用pg_*函数连接到Postgres数据库.
是否有类似情况的好例子或任何人都可以提供任何帮助?我不知道我是否应该在文件中拥有本地版本的数据库或连接到远程服务器.如果我必须连接,我该怎么做才能使它工作?
结束语
项目架构师和我进行了调查,我们确定最好实现ORM,因为数据库没有抽象.在此之前,数据库测试将暂停.一旦到位,我确信PHPUnit手册会更有意义.
我目前正在开发一个传统的ASP项目,其中安全性现在已成为一个大问题.它不仅是不安全的加密方法(md5),而且我担心SQL注入问题.我对注射效果还不是很好,而且我只尝试过我所知道的基础知识.我发现了"保护"任何用户输入的功能,但我想知道它是否真的做了什么来防止注入攻击.这是功能:
function sqlfix(input)
if not isnull(input) and input <> "" then
input = replace(input, ";", ";")
input = replace(input, "'", "'")
input = replace(input, """", """)
input = replace(input, "(", "(")
input = replace(input, ")", ")")
input = replace(input, "|", "|")
input = replace(input, "<", "<")
input = replace(input, ">", ">")
input = replace(input , "'", "''")
'input = Server.HTMLEncode(input)
'input = Server.UrlEncode(input)
sqlfix = input
else
sqlfix = ""
end if
end function
Run Code Online (Sandbox Code Playgroud)
我记得在很多年前我第一次使用mysql_*函数启动PHP时做了类似的事情,但现在我已经转向了PDO和参数绑定.但是我不知道这对ASP应用程序有多安全.感谢您的任何意见.
我有一个使用PDO的DB包装器类,在构造函数中我创建了一个PDO对象.包装器类在我们的命名空间中,我们使用自动加载器.问题是我们的命名空间中找不到PDO类,因此我尝试使用此处描述的全局命名空间.
//Class file
namespace Company\Common;
class DB {
private function __construct(){
$this->Handle=new PDO(...);
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我得到了这个(正如预期的那样):
Warning: require(...\vendors\Company\Common\PDO.class.php): failed to open stream
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
namespace Company\Common;
use PDO;
Run Code Online (Sandbox Code Playgroud)
我明白了:
Fatal error: Class 'DB' not found in ...\includes\utils.php
Run Code Online (Sandbox Code Playgroud)
而utils.php在错误行中包含这个,在实现名称空间之前工作正常:
DB::getInstance();
Run Code Online (Sandbox Code Playgroud)
或者我试过这个:
namespace Company\Common;
class DB {
private function __construct(){
$this->Handle=new \PDO(...);
}
}
Run Code Online (Sandbox Code Playgroud)
它试图像我们最初那样在我们的命名空间中加载PDO类.
我该如何解决这个问题?我想通过这样做use PDO或new \PDO它会加载全局PDO类,但它似乎没有工作?
php ×3
javascript ×2
ajax ×1
amazon ×1
asp-classic ×1
asp.net ×1
autoload ×1
html ×1
html5 ×1
iis ×1
json ×1
modal-dialog ×1
mysql ×1
namespaces ×1
pdo ×1
phpunit ×1
postgresql ×1
sql ×1
unit-testing ×1
vb.net ×1