小编Bil*_*ill的帖子

单击后退按钮时是否存在跨浏览器onload事件?

对于所有主流浏览器(IE除外),onload由于后退按钮操作,页面加载时不会触发JavaScript 事件 - 它仅在首次加载页面时触发.

有人能指出我解决这个问题的一些示例跨浏览器代码(Firefox,Opera,Safari,IE,...)吗?我很熟悉Firefox的pageshow活动,但不幸的是Opera和Safari都没有实现这一点.

javascript pageload

180
推荐指数
6
解决办法
18万
查看次数

Web Worker限制数量

问题

我发现浏览器可以生成的Web Workers数量有限.

主要的HTML/JavaScript

<script type="text/javascript">
$(document).ready(function(){
    var workers = new Array();
    var worker_index = 0;
    for (var i=0; i < 25; i++) {
        workers[worker_index] = new Worker('test.worker.js');
        workers[worker_index].onmessage = function(event) {
            $("#debug").append('worker.onmessage i = ' + event.data + "<br>");
        };
        workers[worker_index].postMessage(i); // start the worker.      

        worker_index++;
    }   
});
</head>
<body>
<div id="debug">
</div>
Run Code Online (Sandbox Code Playgroud)

test.worker.js

self.onmessage = function(event) {
    var i = event.data; 

    self.postMessage(i);
};
Run Code Online (Sandbox Code Playgroud)

使用Firefox(版本14.0.1,Windows 7)时,这将在容器中仅生成20个输出行.

有没有解决的办法?我能想到的唯一两个想法是:

1)雏菊链接网络工作者,即使每个网络工作者产生下一个

例:

<script type="text/javascript">
$(document).ready(function(){
    createWorker(0);
});

function createWorker(i) { …
Run Code Online (Sandbox Code Playgroud)

javascript

35
推荐指数
4
解决办法
2万
查看次数

$ _SERVER ['server_port']返回的端口号不正确

场景:我正在使用一些PHP工作在Apache Web服务器上.我将浏览器指向https://my.example.com/test.php,其中包含以下代码行:

<pre>
<?php
print_r($_SERVER);
?>
</pre>
Run Code Online (Sandbox Code Playgroud)

为SERVER_PORT打印的值是80,而不是443.但是,如果我去https://my.example.com:80/test.php网络服务器(Apache)barfs(连接到my.example.com:80时发生错误.SSL收到的记录超过了最大允许长度.错误代码:ssl_error_rx_record_too_long).如果我转到https://my.example.com:443/test.php,那么URL会重定向到https://my.example.com/test.php,没有任何错误或问题,除了我的PHP打印出来服务器端口是80而不是443.

这是conf.d/ssl.conf文件中的相关部分(我删除了我认为无关的指令,并用IP_ADDRESS替换了实际的IP地址):

Listen IP_ADDRESS:443    
<VirtualHost *:443>
        ServerName my.example.com
        ServerAlias my
        DocumentRoot "/path/to/document_root/htdocs"
        Options +Indexes
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

以下是$ _SERVER变量的完整打印(我的服务器详细信息已编辑/更改为匿名示例):

Array
(
    [HTTP_HOST] => my.example.com
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip,deflate
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
    [HTTP_KEEP_ALIVE] => 115
    [HTTP_CONNECTION] => keep-alive
    [HTTP_COOKIE] => PHPSESSID=randomstring_yes_I'm_that_paranoid
    [PATH] => /sbin:/usr/sbin:/bin:/usr/bin …
Run Code Online (Sandbox Code Playgroud)

php ssl

16
推荐指数
2
解决办法
1万
查看次数

使用"后退"按钮时,选择菜单未恢复

考虑一个具有选择菜单的网页,该菜单包含与菜单的onchange事件相关联的JavaScript事件处理程序,该事件在被触发时使用新的查询字符串重新加载页面(使用菜单中选择的值).

问题:当用户点击"返回"按钮时,页面DOM将从缓存中恢复,但不会退出选择菜单的状态.

受影响的浏览器: Firefox和Safari(使用后退/前向缓存)

示例:

<script language="javascript" type="text/javascript">
function reloadPage() {
    var menu = document.getElementById("select1");
    var val = menu.options[menu.selectedIndex].value;
    window.location.href = 'test.html?select1=' + val;
} 
</script>
<form action="#" method="get" name="form1">
    <select name="select1" id="select1" onChange="reloadPage();">
    <option value="A" selected>Option A</option>
    <option value="B">Option B</option>
    <option value="C">Option C</option>
    <option value="D">Option D</option>         
    </select>
</form>
Run Code Online (Sandbox Code Playgroud)

查看此页面并注意到选项A已被选中.然后选择一个不同的选项(比如选项C) - 重新加载页面(带有查询字符串,?select1 = C).然后点击后退按钮 - 选择菜单继续显示选项C.

问题:有谁知道为什么选择菜单没有恢复以及如何解决这个问题?我过去曾使用JavaScript强制页面上的表单字段与查询字符串匹配,但是这种方法存在问题(例如,FF和Safari通常不会在加载页面时执行窗口的onload事件缓存)这对我来说似乎是一个黑客攻击.

有什么建议?

更新:我刚刚想到可能发生的事情如下:

  1. 选项C被选中
  2. 页面被缓存
  3. JavaScript加载新的URL
  4. 按下后面的按钮
  5. 选项C已恢复,因为它是在重新加载JavaScript /页面之前缓存的内容.

所以我认为这不是浏览器没有恢复选择菜单状态的问题,这是一个时间问题.

javascript

15
推荐指数
4
解决办法
1万
查看次数

当Base类位于单独的包含文件中时,找不到扩展类

这不起作用:

test.php的:

include_once('test-include.php');  

$main = new mainClass();

//======================================================================
class mainClass { 
   function __construct() {
      $test2 = new Test2();
      echo $test2->var;
   }
}

//======================================================================
class Test2 extends Test1 { // test2
  var $var = 'b';
}
Run Code Online (Sandbox Code Playgroud)

测试include.php:

// this does get printed out, so I know the include statement is working
echo 'DEBUG: this is the test-include.php file<br>'; 

//======================================================================
class Test1 { // test1
  var $var = 'a';
}
Run Code Online (Sandbox Code Playgroud)

它给出以下错误

PHP Fatal error:  Class 'Test2' not found in /path/to/test.php on line …
Run Code Online (Sandbox Code Playgroud)

php oop

7
推荐指数
1
解决办法
2万
查看次数

JavaScript:console.log()给出的结果与alert()不同

console.log()是否应该在JavaScript中调用时打印出变量的值?这是我的假设,但当我在Firefox(使用Firebug)或谷歌Chrome(并使用内置的开发工具)中运行下面的代码时,我似乎得到了数组的"最终"值,而不是当时的数组.如果我使用alert()语句,它们会打印出我期望的内容 - 调用alert()语句时数组的值.

var params = new Array();
var tmp = new Array('apple', 'banana', 'cat');

for (var i=0; i < tmp.length; i++) {
    params[tmp[i]] = [];
}

console.log(params);
/*
SHOWS IN CONSOLE:

- []
+ apple             ["jan", "feb", "mar", "apr"]
+ banana            ["jan", "feb", "mar", "apr"]
+ apple             ["jan", "feb", "mar", "apr"]
*/

alert( print_arr(params) );
/* 
ALERT BOX TEXT:

[apple]:
[banana]:
[cat]:
*/

console.log('===========================================');

var tmp2 = new Array('jan', 'feb', 'mar', 'apr');
for (var i=0; i < tmp.length; i++) …
Run Code Online (Sandbox Code Playgroud)

javascript

4
推荐指数
1
解决办法
1528
查看次数

JSON结构在IE7(JavaScript)中不起作用

好的,我是JSON的新手所以请原谅我,如果我的问题有点无知 - 我已经太过头了,我需要一些专家建议.

我正在尝试使用一个简单的示例,其中HTML页面使用jQuery的JSON/AJAX函数调用示例PHP页面,该页面传回一个简单的JSON数据结构,然后该页面使用jQuery编写其中一个元素页面的数据结构.在FF工作.在IE7中不起作用arrrggghhhh!

HTML代码(相关部分):

<script language="javascript" type="text/javascript" src="jquery.js"></script>
<script language="javascript" type="text/javascript">
function testAJAX() {
  $.getJSON("test-ajax.php", function(json){
      $("#div1").html(json.var1[1]);
  });
}
</script>
</head>
<body>
<input type="button" value="test ajax" onclick="testAJAX();" />
<div id="div1"> </div>
</body>
Run Code Online (Sandbox Code Playgroud)

PHP代码(test-ajax.php):

<?php
include_once('./json.php'); 
$output = array('var1' => array('value1a', 'value1b', 'value1c'), 
                'var2' => array('value2a', 'value2b', 'value2c')); 

header("Content-type: text/plain");
echo json_encode($output);
?>
Run Code Online (Sandbox Code Playgroud)

json.php有我正在使用的json_encode()函数 - 我是从http://us2.php.net/manual/en/function.json-encode.php得到的.我正在使用它,因为我没有PHP5,我的系统管理员不会安装任何支持.只需在浏览器中直接查看test-ajax.php即可打印出如下所示的序列化JSON结构:

{"var1":["value1a","value1b","value1c"],"var2":["value2a","value2b","value2c"]}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个有效的JSON结构.在我的JavaScript中,我试图'value1b'通过这样做来引用:json.var1[1].FF处理这个很好.IE7说这是未定义的.

我究竟做错了什么?如何转移像这样的二维数组

array('var1' => array('value1a', 'value1b', 'value1c'), 
      'var2' => array('value2a', 'value2b', 'value2c'));
Run Code Online (Sandbox Code Playgroud)

在JSON/AJAX?或者这不可能吗?

javascript php json internet-explorer-7

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

javascript ×5

php ×3

internet-explorer-7 ×1

json ×1

oop ×1

pageload ×1

ssl ×1