js 如何判断一个已打开的页面是不是存在??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 如何判断一个已打开的页面是不是存在??相关的知识,希望对你有一定的参考价值。

在main.htm页面通过
win=window.open("test.htm","test","")打开一个窗口后,
可以在另一个页面,如main22.htm判断这个页面是否存在吗?
如果存在,则调用test.htm中的一个方法.
如果不存在,则重新open test.htm,并调用test.htm中的那个方法.
哪位高手指教啊.
这个问题困挠我好几天了.....
能再详细一些吗?
window.open返回的句柄是win.
打开的窗口的名称是"test"

to:7421021
不行啊.
第一次open是在main.htm
我现在要在另一个页面main22.htm进行check...

<script language="javascript">
var win;
function OpenWindow

win=window.open("test.htm","test","");

function CheckWindow()

if(win!=null)

如果存在,则调用test.htm中的一个方法

else

如果不存在,则重新open test.htm,并调用test.htm中的那个方法.
OpenWindow();//如果不存在,则重新open test.htm


</script>

To:top1

那就没办法啦..因为只子窗口打开后只能在父窗口监测..
参考技术A 金手指:请使用Cookie以及setInterval设计,详细代码就不用我说了吧?! 参考技术B 如果页面间不存在任何关系的话!
目前的没有这项功!或许以后会有!
参考技术C 土方法:在test.htm放张1x1的空白图片,然后在main22.htm检测if(../..gif) 参考技术D if windows.visbale=1 then....

如何判断 JavaScript 文件是不是已包含在 ASP.NET 页面中?

【中文标题】如何判断 JavaScript 文件是不是已包含在 ASP.NET 页面中?【英文标题】:How can I tell whether a JavaScript file has already been included in an ASP.NET page?如何判断 JavaScript 文件是否已包含在 ASP.NET 页面中? 【发布时间】:2010-10-28 20:22:55 【问题描述】:

我有一个 ASP.NET 用户控件(.ascx 文件)。在这个用户控件中,我想使用一个 .js 文件。

所以我在页面上包含&lt;script src="file.js" type"text/javascript"&gt;&lt;/script&gt;

但是,有时我在已加载相同脚本的网页中使用此用户控件。

如何添加 &lt;script /&gt; 声明,仅当页面尚未包含同一脚本的另一个 &lt;script /&gt; 标记时才会在页面上呈现?

【问题讨论】:

有什么原因不能在所有页面中都包含 javascript 库吗? jfar,当我显示特定控件时,我的网站只需要一个特定页面上的 javascript 文件,大多数时候该控件根本不会在该页面上使用。将 javascript 提供给访问网站每个页面的每个用户都是浪费的,尤其是如果他们的浏览器坚持在每个请求中都请求文件。 我不想在所有页面中都包含它的原因是性能:我不需要在所有页面中都包含它。尼尔,谢谢你的解释。 【参考方案1】:

当您使用 asp.net 时,检查服务器端是有意义的,因为您选择在其中添加对 javascript 文件的引用。从您的 .ascx 文件中,您可以注册以下内容:

this.Page.ClientScript.RegisterClientScriptInclude("GlobalUnqiueKey", UrlOfJavascriptFile);

...从您的页面中,您只需直接调用 ClientScript 对象:

ClientScript.RegisterClientScriptInclude("GlobalUnqiueKey", UrlOfJavascriptFile);

“GlobalUniqueKey”可以是任何字符串(我也使用 javascript 文件的 url)

如果您尝试使用相同的密钥字符串注册脚本,它不会执行任何操作。因此,如果您在您的页面、控件或其他任何地方调用它,您最终将在您的页面中只有一个引用。这样做的好处是您可以在页面上拥有多个控件实例,即使它们都尝试注册相同的脚本,但最多只能完成一次。而且他们都不需要担心脚本已经注册了。

有一个 'IsClientScriptIncludeRegistered(stringkey)' 方法,您可以使用它来查看脚本是否已包含在该键下,但在注册为多次尝试注册之前进行检查似乎非常多余,不要抛出异常或导致任何其他错误。

在客户端进行检查意味着,假设浏览器缓存了多个 javascript 引用(它们可能没有缓存),您仍然有多个标签,并且每个标签的开销都会导致一些 javascript 运行。如果您在一个页面上有 20 个控件实例,您可能会遇到严重的问题。

【讨论】:

不懂 ASP,但这看起来比我做的客户端更好。 根据您的回答,我在基本页面布尔属性“AttachJqery”、“AttachEngine”等基础上构建,它控制着附件,因此我不必弄脏代码。我还可以选择设置默认值。如果任何人需要示例将很高兴发布,请在此处发表评论。【参考方案2】:

你可以在客户端做两件事之一......

    检查与您要检查的javascript文件对应的脚本标签的dom 测试您知道已经/将在 javascript 文件中定义的变量或函数是否未定义。

这是一个快速的 JS 函数,它使用 JQuery 来做你需要的事情:

function requireOnce(url)     
    if (!$("script[src='" + url + "']").length) 
        $('head').append("<script type='text/javascript' src='" + url + "'></script>"); 
    

【讨论】:

谢谢。我使用 jQuery,那太棒了。感谢所有回答者,我一定会在未来使用它们。 一个问题是,如果 jQuery 本身是我要检查的脚本 :)【参考方案3】:

使用类似以下的内容:

if(typeof myObjectOrFunctionDecalredInThisScript != 'undefined') 
  // code goes here
  var myObjectOrFunctionDecalredInThisScript =  ;

这会测试您的对象或函数是否已经存在,从而防止重新声明。

【讨论】:

【参考方案4】:
var storePath = [];
function include(path)
if(!storePath[path])
    storePath[path]= true;
    var e = document.createElement("script");
    e.src = path;
    e.type = "text/javascript";
    document.getElementsByTagName("head")[0].appendChild(e);
    return false;
  

在您的主页中使用它并使用参数 javascript 文件名调用函数 include

【讨论】:

【参考方案5】:

因为您只想在网站的一页上包含 javascript。 如果你使用 Asp.net(4.0) 那就很简单了。 只需包含以下代码

<script type="text/javascript" scr="filepath and name here"></script>

在内容页面的ContentPlaceHolder 中。

【讨论】:

【参考方案6】:

@Shimmy 很长一段时间后我才遇到这个问题,但也许它仍然有用,或者至少可以帮助后面的其他人。要检查 jquery 是否已加载,请执行此操作

<script>window.jQuery || document.write('<script src="js/libs/jquery-1.x.x.min.js"><\/script>')</script>

不要错过 document.write 语句中结束脚本标记中的转义字符。

@mysomic,我怎么没想到。竖起大拇指

PS:我很想在@Shimmy 写下jQuery 本身就是他想要加载的脚本的那一行写下这个。但不知道如何在那里写。看不到回复或任何类似的链接。这可能听起来很愚蠢,但也许我错过了一些东西。请指出来,有人吗?

【讨论】:

【参考方案7】:

如果您从服务器端需要它,并且 Page.ClientScript.RegisterClientScriptInclude 对您不起作用,以防脚本通过 Page.ClientScript.RegisterClientScript 以外的其他方式包含(例如 page.Header.Controls.Add( ..),你可以使用这样的东西:

static public void AddJsFileToHeadIfNotExists(Page page, string jsRelativePath)

    foreach (Control ctrl in page.Header.Controls)
    
        if (ctrl is HtmlLink htmlLink)
        
            if (htmlLink.Href.ToLower().Contains(jsRelativePath.ToLower())) return;
        
        if (ctrl is ITextControl textControl
          && (textControl is LiteralControl || textControl is Literal))
        
            if (textControl.Text.ToLower().Contains(jsRelativePath.ToLower())) return;
        
        if (ctrl is HtmlControl htmlControl)
        
            if (htmlControl.Attributes["src"]?.ToUpper()
              .Contains(jsRelativePath.ToUpper())) return;
        
    

    HtmlGenericControl Include = new HtmlGenericControl("script");
    Include.Attributes.Add("type", "text/javascript");
    Include.Attributes.Add("src", page.ResolveUrl(jsRelativePath));
    page.Header.Controls.Add(Include);    

【讨论】:

过多的转换 ctrl 是 HtmlLink,然后 ctrl 作为 Html 链接。考虑: var lnk = ctrl as HtmlLink;如果 ctrl != null 。保存演员表。

以上是关于js 如何判断一个已打开的页面是不是存在??的主要内容,如果未能解决你的问题,请参考以下文章

js如何判断一个页面是不是已跳转到指定的页面了呢

js判断一个变量或对象是不是存在

如何判断js里的对象是不是存在

如何判断 JavaScript 文件是不是已包含在 ASP.NET 页面中?

nodejs puppeteer打开一个页面后,在点击跳转到另一个页面 怎么判断这么页面是不是所有的元素都已加载完成

js怎么判断一个对象是否类数组对象