使用场景

在开发Chrome插件时, 有一种需求:

要求在WEB页面显示一个浮动窗口(A), 在此窗口中允许用Ajax方式调用另一个服务器上的一个页面(B)

B页面上有独立的功能用JS写function来实现

已知条件

窗口A可以利用content-script.js动态生成

窗口A中放置一个按钮, 调用Onclick方法召唤出B页面, 样例代码如下

<button onclick="invokeContentScript('openalertWin()')">test</button>

具体实现的function

function openalertWin(){
var domobj = $('#div_alert');
if(""==domobj.text()){
domobj.load(_domain+'/nj/fun/setalert').show();
}else{
domobj.toggle('fast');
}
}

页面B中

有一个按钮和一个JS function

<button onclick="funcB()">testB</button>

具体实现代码也在页面B中

function funcB(){
alert("I am B");
}

碰到的问题

实际运行的时候, 发现B页面的按钮按下后会报错:

Uncaught ReferenceError: funcB is not defined 

funcB明明存在于页面B中, 但却无法被调用

解决办法

> 方法一, 修改窗口A加载B的方法

取消函数调用法, 改为直接Ajax加载, 代码如下:

<button onclick="$('#div_alert').load('https://xxxxx/nj/fun/setalert')">test</button>

发现页面B中的功能马上能正常运行

> 方法二, 迂回法则

这个方法比较复杂, 思路如下

1. 在窗口A中放置一个隐藏按钮A1

<button id="btn_A1" style="display:none" onclick="invokeContentScript('funcB()')">A1</button>

2.把页面B的function放到content-script.js中

3.页面B中的按钮修改为

<button onclick="$('#btn_A1').click()">testB</button>

完成

方法二缺点是页面B的功能代码被放到插件中, 不利于维护, 不建议使用

chrome插件开发.在content_script异步加载页面后, 如何进行JS通信与调用的问题的更多相关文章

  1. 关于使用Iscroll.js异步加载数据后不能滑动到最底端的问题解决方案

    关于使用Iscroll.js异步加载数据后不能滑动到最底端,拉到最下边又弹回去的问题困扰了我老半天,相信很多朋友都遇到了.我刚好不小心解决了,和大家分享一下.由于各种忙,下边就直接上代码吧. (前提是 ...

  2. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  3. PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题

    PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题,PageSlider中加入CSS3动画的话,默认只有首屏是从无到有执行动画,其他屏都是显示下页面再执行动画 这就造成其他屏的动 ...

  4. 使用Ajax异步加载页面时,怎样调试该页面的Js

    前言-本人不是干前端的,所以有的名词不专业 在前端中,有时候会遇到这样的框架,http://172.17.11.151:8060/frontend/backend.html#1.html (通过解析U ...

  5. python-scrapy框架爬取某瓣电视剧信息--异步加载页面

    前期准备,首先要有python环境+scrapy环境+pycharm环境 一.建立爬虫所需的环境,在命令行输入: scrapy startproject doubantv #命名自定义就好 会生成一个 ...

  6. bootstrap异步加载树后样式显示问题

    整个过程: 1.先加载整个页面 2.通过jquery异步请求后台返回数据 3.循环遍历数据,拼接需要的内容 4.把拼接好的数据加载到页面中. 问题: 把拼接好的内容加载到页面后,样式显示不正确.而如果 ...

  7. 当页面完全加载完成后执行一个JS函数

    方法1.如下程序,当页面完全加载后执行openTheIndexPage()方法  <html>  <head>  <meta http-equiv="Conte ...

  8. 动态html,异步加载页面的处理

    Selenium 基本使用 # 导入 webdriverfrom selenium import webdriver# 调用键盘按键操作时需要引入的Keys包from selenium.webdriv ...

  9. HTML页面加载完毕后运行的js

    Js方法:<script type=”text/javascript”> window.onload=function (){ var userName=”xiaoming”; alert ...

随机推荐

  1. Ex 6_17 数量无限的硬币兑换问题_第七次作业

    子问题定义:定义一个数组b,大小比兑换价格的大小多一个元素,其中b[i]表示是否能用面值为x1,x2,x3,..,xn的硬币兑换价格i. 递归关系: 初值设定:设b[0]=true 求解顺序:按下标从 ...

  2. 淘淘商城 本地仓库配置和仓库jar包下载

    SVN服务器的搭建请查看该文:<Win7 x64 svn 服务器搭建> 1:仓库包存放位置: 2:setting.xml 文件配置信息 <?xml version="1.0 ...

  3. Flex 布局教程转载

    Flex 布局教程:语法篇 http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html Flex 布局教程:实例篇 http://www.ruan ...

  4. Java中的钩子方法

    钩子方法是啥 钩子顾名思义就是用来挂东西的.那么要挂东西必须有个被挂的东西,要不就是铁环.要不就是墙的边沿.所以要能挂住东西必须要有个被勾住的铁环,要一个钩子.那么在java中也是同样的原理,你首先需 ...

  5. poj2018 二分+线性dp好题

    /* 遇到求最值,且答案显然具有单调性,即可用二分答案进行判定 那么本题要求最大的平均数,就可以转换成是否存在一个平均数为mid的段 */ #include<iostream> #incl ...

  6. ERP退货系统管理(四十五)

    添加的存储过程:(添加退货申请信息的存储过程) CREATE PROCEDURE [dbo].[BioBackSendGoods_ADD] @SendBackID INT OUTPUT, ), @Ap ...

  7. mongodb 备份

    本篇文章来自于阿里云技术专家郑涔(明俨)在2018年<Redis.MongoDB.HBase大咖直播大讲堂>技术直播峰会中的分享,该分享整体由四个部分构成: 1.MongoDB备份恢复 2 ...

  8. BZOJ3091 城市旅行 LCT

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3091 题意概括 鉴于本人语文不好,此题的描述原题很清晰,废话不多,请看原题. 可怕,原题是图片,不 ...

  9. 定制库到maven库

    有一些jar不支持maven,这个时候就可以使用下面的处理方式. kaptcha,它是一个流行的第三方Java库,它被用来生成 “验证码” 的图片,以阻止垃圾邮件,但它不在 Maven 的中央仓库中. ...

  10. Smali语法

    看阿里巴巴的<深入探索Android热修复>,里面的代码看不懂,一查才知道是Smali语法,百度了语法,转载如下 转载自smali 语言语法 1.smali apk文件通过apktool反 ...