chrome插件开发.在content_script异步加载页面后, 如何进行JS通信与调用的问题
使用场景
在开发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通信与调用的问题的更多相关文章
- 关于使用Iscroll.js异步加载数据后不能滑动到最底端的问题解决方案
关于使用Iscroll.js异步加载数据后不能滑动到最底端,拉到最下边又弹回去的问题困扰了我老半天,相信很多朋友都遇到了.我刚好不小心解决了,和大家分享一下.由于各种忙,下边就直接上代码吧. (前提是 ...
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题
PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题,PageSlider中加入CSS3动画的话,默认只有首屏是从无到有执行动画,其他屏都是显示下页面再执行动画 这就造成其他屏的动 ...
- 使用Ajax异步加载页面时,怎样调试该页面的Js
前言-本人不是干前端的,所以有的名词不专业 在前端中,有时候会遇到这样的框架,http://172.17.11.151:8060/frontend/backend.html#1.html (通过解析U ...
- python-scrapy框架爬取某瓣电视剧信息--异步加载页面
前期准备,首先要有python环境+scrapy环境+pycharm环境 一.建立爬虫所需的环境,在命令行输入: scrapy startproject doubantv #命名自定义就好 会生成一个 ...
- bootstrap异步加载树后样式显示问题
整个过程: 1.先加载整个页面 2.通过jquery异步请求后台返回数据 3.循环遍历数据,拼接需要的内容 4.把拼接好的数据加载到页面中. 问题: 把拼接好的内容加载到页面后,样式显示不正确.而如果 ...
- 当页面完全加载完成后执行一个JS函数
方法1.如下程序,当页面完全加载后执行openTheIndexPage()方法 <html> <head> <meta http-equiv="Conte ...
- 动态html,异步加载页面的处理
Selenium 基本使用 # 导入 webdriverfrom selenium import webdriver# 调用键盘按键操作时需要引入的Keys包from selenium.webdriv ...
- HTML页面加载完毕后运行的js
Js方法:<script type=”text/javascript”> window.onload=function (){ var userName=”xiaoming”; alert ...
随机推荐
- 日常用的css基础和自己常用的js封装
css基础:base /* * 初始化 */ *::after, *::before { box-sizing: border-box; } body { font-family: 'Microsof ...
- FreeSWITCH与PSTN对接
FreeSWITCH与PSTN电话系统对接设定 一.环境介绍 我们目前使用模拟的话机连接到电信运营商,购买他们配套的电话总机,勉强实现了公司的基本通话.但是客户电话总机系统以及升级添加新的应用不但费用 ...
- python恶俗古风诗自动生成器
# -*- coding:utf-8 -*- #模仿自: http://www.jianshu.com/p/f893291674ca#python恶俗古风诗自动生成器from random impor ...
- C++ code:char pointers and char arrays(字符指针与字符数组)
C-串的正确赋值.复制.修改.比较.连接等方式. #include<iostream> #pragma warning(disable: 4996)//这一句是为了解决“strrev”出现 ...
- 性能测试三十四:jvm内存结构(栈、堆、永久代)
Java内存管理机制 Java采用了自动管理内存的方式Java程序是运行在Jvm之中的Java的跨平台的基于Jvm的跨平台特性内存的分配和对象的创建是在Jvm中用户可以通过一系列参数来配置Jvm Jv ...
- 优化MVC,实现数据库表的记录的添加、删除、修改、查询。
一.在UserDAO里面重写实体user要调用的方法: 1.查询所有user表中的记录.用getAllUser()方法得到List public class UserDAO { public List ...
- Java_myeclipse添加DTD约束(框架xml只能提示功能)
以struts2中的xml为例 struts-2.3.4-all\struts-2.3.4\src\core\src\main\resources
- codeforces 758D Ability To Convert【DP】
在N进制下给你一个数,要你转换成最小的十进制数; 状态转移方程:从前向后 dp[j]表示j位前数列的最小十进制数 dp[j]=min(dp[j],dp[i]*n+x) 程序: #include < ...
- Codeforces 757 C Felicity is Coming!
题目大意:有n个训练营,m种宠物,每个训练营里里面有gi 个宠物,现在每只宠物都要完成一次进化,种类 相同的宠物进化之后,种类还是相同,种类不同的宠物不能进化成相同种类,且要求所有宠物进化之后,每个 ...
- Cpu 主频与睿频
主频就是一颗CPU的运行频率.比如一颗CPU是2.3G,无论是单核还是多核,所有的核心都是工作在2.3G. 睿频是Intel的一项加速技术,指当启动一个运行程序后,处理器会自动加速到合适的频率,而原来 ...