<base target="_self">超详细收集的

本文详细解释了HTML中链接及目标窗口的相关属性,包括如何控制链接打开的方式,以及&lt;basetarget&gt;和&lt;base&gt;标签的具体用法。同时介绍了在不同浏览器环境下可能遇到的问题及其解决方案。
<base target="_self">是什么意思
<base target=_blank>//在空白页打开
<base target=_parent>//在当前页的上一页(父亲)打开
<base target=_search>//在浏览器地址栏打开
<base target=_self>//在当前页打开
<base target=_top>//在最初(祖先)页打开

base 是地址
target是打开目标
1、如果你是IE6,你将<base target="_self"/>加入到<head>标签里就可以了。
2、如果你是IE7,你必须将<base target="_self"/>加入到<head>的对口中位置。

target就是点击链接后跳转到的目标页。
通俗点说,就是你当前页面上的链接<a>,也包括<img>、<link>、<form>,除非你指定了target,如<a heft="" target="_blank">链接一</a>,否则都会按照<base target="_self">的规定在_self(本页面)打开。这个base target=""还可以是top、_blank、parent或者其……


为了提交数据或者什么的,防止链接到新的页面,于是就在本页面操作,其实就是为了生存新的页面

我遇到过这个问题。没加这一句的时候,页面点击关闭或者确定按钮,又打开了一个IE页面,显示的内容和当前页面相同,加上这句以后没这个问题。

若不是你提醒了我,关闭窗口后从新打开窗口,我还真想不到是这个地方做的怪,感谢!


  <base target=_blank>是将基本链接的目标框架都改为新页打开,如果对HTML、CSS和JS不是很熟悉,不建议使用这种方法,改为独立控制。
  其实<a>、<form>等很多标签都支持target="black"的属性,建议在这样的标签里单独做设置,比如:
<a href="xxx.htm" target="_blank">超链接内容</a> <form action="xxx.htm" target="_blank">表达内容<input type="submit" value="提交按钮"></form> 如果不加这一句,默认均为本页刷新,即target="_self"。
 在网页中,经常碰到这种情况:点击某些链接,就会弹出新窗口,原来的页面部改变,而有些链接,就在原窗口上打开新的链接,原窗口没有了,被覆盖了。这个是为什么呢?怎么实现的呢?
target=_blank,这个标签,就是解决这个问题的。<base target=_blank>是将基本链接的目标框架都改为新页打开,即弹出新窗口。<a>、<form>等很多标签都支持target="black"的属性,可以在这样的标签里单独做设置,比如:
<a href="xxx.htm" target="_blank">超链接内容</a>
<form action="xxx.htm" target="_blank">表达内容<input type="submit" value="提交按钮"></form> 如果不加这一句,默认均为本页刷新,即target="_self"。还有两个这样的标签,<target=_top>表示在整页窗口打开,<target=_parent>表示在父窗口打开。
<a href="http://www.try0212.blog.sohu.com/" target="_blank">单独定义,新窗口打开</a>
<a href="http://www.try0212.blog.sohu.com/" target="_self">单独定义,相同窗口打开</a>
<a href="http://www.try0212.blog.sohu.com/" target="_top">单独定义,整页窗口打开</a>
<a href="http://www.try0212.blog.sohu.com/" target="_parent">单独定义,父窗口打开</a>
另外,这只是单独设置,如果有在某个页面上有很多的链接或者form表单,逐一的添加标签会很麻烦,有没有类似批处理的呢?
这就要用到<base target=_xxx> ,这是基本的HTML语言。用<base target=_××>来设置这个网页所有链接的目标窗口。也就是说,网页中只要添加<base target=_××>这句,那么所有的超链接就无须单独设置。最好将这句写在<head>和</head>之间。例如
<base target=_blank>表示网页中所有的超链接的目标地址都在新建窗口中打开。
<base target=_self>表示网页中所有的超链接的目标地址都在原窗口上打开。
当然,这样的标签有时也会碰到麻烦。
1 不符合标准 
当我们使用W3C过渡型标准时,即DOCTYPE(xh tml1-transitional. dtd),没有问题,但是使用严格的标准时,即DOCTYPE(xhtml1-strict.dtd),就会出错,错误提示:
"there is no attribute target for this element(in this HTML version)"
原因是,外国人认为,不经过用户同意,就随便打开新窗口,是不礼貌的,不尊重用户的,
那碰到这种情况时怎么办呢?
HTML4.0增加了一个新属性:rel,这个属性用来说明链接和包含此链接页面的关系,以及链接打开的目 标。rel有许多的属性值,比如next、previous,、chapter、section等等。我们要使用的就是rel="externa l"属性。原来这样写的代码:
<a href="document.html" target="_blank"> 打开一个新窗口</a> 现在要写成这样:
<a href="document.html" rel="external">打开一个 新窗口</a> 这是符合strict标准的方法。当然还必须配合一个javascript才有效。
javascript
完整的代码JS如下:
function externallinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName_r("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute("href") &&
anchor.getAttribute("rel") == "external")
anchor.target = "_blank";
}
}
window.onload = externallinks;
你可以把它保存成一个.js文件(比如external.js),然后通过外部联接方法调用:
<script type="text/javascript" src="external.js"></script>
就是这样。
2 浏览器不支持
有时,使用了上述标签,但是,任旧不见效果,比如使用了target=_blank,却不能弹出窗口,这是因为,有些浏览器被用户设置了,不让弹出窗口,当然这样设置是为了屏蔽广告,因此,这是就无法打开新窗口,知道了原因,解决就很简单了,在浏览器中设置一下就可以了。

3
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<base target="_self">
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
function closeDown()
{
window.returnValue=document.getElementByIdx_x_x_x_x("values").value;
window.close();
}
</SCRIPT>
<BODY>
<input type="text" id="values">
<a href="javascript:window.opener=null;closeDown()">关闭窗口</a>
<input type="button" onclick="closeDown()">
</BODY>
</HTML>
<base target="_self">什么意思
<base> 标签为页面上的所有链接规定默认地址或默认目标。
通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。
使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括 <a>、<img>、<link>、<form> 标签中的 URL。
target就是点击链接后跳转到的目标页。
通俗点说,就是你当前页面上的链接<a>,也包括<img>、<link>、<form>,除非你指定了target,如<a heft="" target="_blank">链接一</a>,
否则都会按照<base target="_self">的规定在_self(本页面)打开。这个base target=""还可以是top、_blank、parent或者其他frame名称。
很霸道的本页打开链接
base 是地址
target是打开目标
<base target=_blank>//在空白页打开
<base target=_parent>//在当前页的上一页(父亲)打开
<base target=_search>//在浏览器地址栏打开
<base target=_self>//在当前页打开
<base target=_top>//在最初(祖先)页打开
我遇到过这个问题。没加这一句的时候,页面点击关闭或者确定按钮,又打开了一个IE页面,显示的内容和当前页面相同,加上这句以后没这个问题。
在创建或修改布局复杂Asp.Net服务器端控件时,大量的时间都是在编译,等待JIT,修改,编译,JIT... 这样一个循环中,而且两个编译常常还很耗费时间。特别地,当控件已集成在页面之中后,在出现一些布局效果上的小偏差,再调整起来将是一个非常无趣和耗时的工作。
而这时如果能直接修改已输出的Html,很可能会更加迅速的找到问题所在。但是不幸的时,通过浏览器Save As出来的html代码显然是不太具有修改价值的。因为本来就只是要进行细微的布局调整,而Save As出来页面新的布局问题可能比本身要解决的问题更加严重。
那么就直接通过View Source把代码copy出来存为html文件呢?这时后我们会发现页面里面所有通过相对路径定位的资源都回丢失,比如什么图片啊,javascript啊等等,缺失了这些东西,页面也就同样失去了再调整编辑的价值。
在HTML中,有一个base标签,这个元素似乎只在模态窗口提交页面避免弹出新窗口的时候,有用到过,平时似乎很少有看到网页用这个元素。殊不知这个base在调试html代码时,非常有用。比如你的ASP.NET页面是a,而这个Index.aspx中显现有很多通过相对路径引用的图片或JavaScript资源,这时我们通过View Source把它的html代码在本地存为: index.htm文件,只用再在其<head>标签中加入<base href=a />这么一行。我们再打开这个index.htm时,会发现这时和打开a的效果是一样的,所有的图片和脚本都正常被载入,这时候在IE Tool Bar等DOM查看工具帮助下,就可以很方便通过直接修改html来调整页面或控件输出的外观样式,在找到错误后再去服务器端代码中进行修改。
HTML用<a>来表示超链接,英文叫anchor。<a>可以指向任何一个文件源:一个HTML网页,一个图片,一个影视文件等。用法如下:<a href="url">链接的显示文字</a>
点击<a></a>当中的内容,即可打开一个链接文件,href属性则表示这个链接文件的路径。
target 属性 -- 代表链接目标
取值
_blank-- 打开一个新窗体
_parent-- 在父窗体中打开
_self-- 在本页打开,此为默认值
_top-- 在上层窗体中打开
一个对应的框架页的名称 -- 在对应框架页中打开
HTML中target的相关说明
1._blank <a href="document.html" target="_blank">my document</a> 浏览器会另开一个新窗口显示document.html文档
2._parent <a href="document.html" target="_parent">my document</a> 指向父frameset文档
3._self <a href="document.html" target="_self">my document</a> 把文档调入当前页框
4._top <a href="document.html" target="_top">my document</a> 去掉所有页框并用document.html取代frameset文档
小技巧1:使别人的页框不能引用你的网页 在文件头加:<base target="_top">
小技巧2:在当前页打开连接或做刷新,提交到当前页在文件头加:<base target="_self">
所有链接都设成_blank简单方法
在页面<head></head>之间加入<base target=_blank>(XHTML:<base target="_blank" />),就会使该页面所有链接均为新开窗口打开。
<base>是一个链接基准标记,用以改变页面中所有链接标记的参数默认值。
引申应用:<head><base href="ganshisanmei." target="_blank" /></head><body><a href="jjpro">资料收集</a></body>那么不管这个页面放置在任何域下面,该链接都会指向http://ganshisanmei.co.cc/index.html
catkin_ws/ └── src/ └── my_robot_pkg/ ├── launch/ # 启动文件目录 │ ├── simulation.launch ├── scripts/ # Python脚本 │ ├── move_to_target.py │ └── input_node.py ├── urdf/ # URDF/XACRO文件 │ ├── four_wheel_robot.xacro ├── worlds/ # Gazebo世界文件 │ └── four_areas.world ├── CMakeLists.txt # 编译规则 └── package.xml # 包配置 simulation.launch <launch> <!-- Gazebo 仿真环境 --> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find my_robot_pkg)/worlds/four_areas.world"/> <arg name="paused" value="false"/> <arg name="use_sim_time" value="true"/> <arg name="gui" value="true"/> <arg name="headless" value="false"/> <arg name="debug" value="false"/> </include> <!-- 加载机器人模型 --> <param name="robot_description" command="$(find xacro)/xacro $(find my_robot_pkg)/urdf/four_wheel_robot.xacro" /> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model my_robot -x 0 -y 0 -z 0.1 -R 0 -P 0 -Y 0" /> <!-- 控制节点 --> <node name="navigation_controller" pkg="my_robot_pkg" type="move_to_target.py" output="screen"/> <!-- 输入节点 --> <node name="target_input" pkg="my_robot_pkg" type="input_node.py" output="screen"/> <!-- RViz 配置 --> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find my_robot_pkg)/rviz/nav_config.rviz" /> <!-- TF 转换 --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /> </launch> input_node.py #!/usr/bin/env python3 import rospy from std_msgs.msg import Int32 class TargetInput: def __init__(self): rospy.init_node('target_input', anonymous=True) self.pub = rospy.Publisher('/target_area', Int32, queue_size=10) # 显示指令提示 print(""" ****************************** * 输入目标区域编号 (1-4): * 1: 红色区域 (1, 0) * 2: 绿色区域 (2, 0) * 3: 蓝色区域 (3, 0) * 4: 黄色区域 (4, 0) * 输入q退出 ****************************** """) def run(self): while not rospy.is_shutdown(): try: user_input = input("请输入目标编号 (1-4): ") if user_input.lower() == 'q': rospy.signal_shutdown("User exit") break target = int(user_input) if 1 <= target <= 4: self.pub.publish(target) rospy.loginfo(f"已发送目标 {target}") else: print("错误:请输入1-4之间的数字") except ValueError: print("错误:无效输入,请输入数字") except rospy.ROSInterruptException: break if __name__ == '__main__': try: node = TargetInput() node.run() except rospy.ROSInterruptException: pass move_to_target.py #!/usr/bin/env python3 import rospy import math import tf from geometry_msgs.msg import Twist, Point from nav_msgs.msg import Odometry from std_msgs.msg import Int32 class NavigationController: def __init__(self): rospy.init_node('navigation_controller', anonymous=True) # PID参数 self.KP_linear = 0.5 # 线速度比例系数 self.KP_angular = 1.2 # 角速度比例系数 self.goal_tolerance = 0.1 # 到达目标的允许误差 # 初始化变量 self.target_position = None self.current_pose = None # 订阅和发布 self.cmd_vel_pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10) rospy.Subscriber('/target_area', Int32, self.target_callback) rospy.Subscriber('/odom', Odometry, self.odom_callback) rospy.loginfo("Navigation controller initialized") def target_callback(self, msg): """处理目标区域输入""" target_dict = { 1: (1.0, 0.0), 2: (2.0, 0.0), 3: (3.0, 0.0), 4: (4.0, 0.0) } self.target_position = target_dict.get(msg.data) if self.target_position: rospy.loginfo(f"New target received: {self.target_position}") def odom_callback(self, msg): """更新当前位姿""" self.current_pose = msg.pose.pose def get_yaw(self): """从四元数获取偏航角""" if self.current_pose: orientation = self.current_pose.orientation quaternion = ( orientation.x, orientation.y, orientation.z, orientation.w ) euler = tf.transformations.euler_from_quaternion(quaternion) return euler[2] # 返回偏航角(绕Z轴旋转) return 0.0 def run(self): rate = rospy.Rate(10) # 10Hz while not rospy.is_shutdown(): if self.target_position and self.current_pose: # 获取当前位置 current_x = self.current_pose.position.x current_y = self.current_pose.position.y # 计算距离差 dx = self.target_position[0] - current_x dy = self.target_position[1] - current_y distance = math.hypot(dx, dy) if distance > self.goal_tolerance: # 计算目标角度 target_yaw = math.atan2(dy, dx) current_yaw = self.get_yaw() # 计算角度差(归一化到[-π, π]) yaw_error = target_yaw - current_yaw if yaw_error > math.pi: yaw_error -= 2 * math.pi elif yaw_error < -math.pi: yaw_error += 2 * math.pi # 生成控制指令 twist = Twist() if abs(yaw_error) > 0.1: # 优先调整方向 twist.angular.z = self.KP_angular * yaw_error twist.linear.x = 0.0 else: # 方向正确后前进 twist.linear.x = min(self.KP_linear * distance, 0.3) # 限制最大速度 twist.angular.z = 0.0 self.cmd_vel_pub.publish(twist) else: # 到达目标,停止运动 self.cmd_vel_pub.publish(Twist()) self.target_position = None rospy.loginfo("Target reached!") rate.sleep() if __name__ == '__main__': try: controller = NavigationController() controller.run() except rospy.ROSInterruptException: pass four_wheel_robot.xacro <?xml version="1.0"?> <robot name="four_wheel_robot" xmlns:xacro="http://www.ros.org/wiki/xacro"> <!-- ################### 参数化定义 ################### --> <!-- 基础参数 --> <xacro:property name="base_length" value="0.4" /> <!-- X轴方向长度 --> <xacro:property name="base_width" value="0.3" /> <!-- Y轴方向宽度 --> <xacro:property name="base_height" value="0.2" /> <!-- Z轴方向高度 --> <!-- 轮子参数 --> <xacro:property name="wheel_radius" value="0.05" /> <!-- 轮子半径 --> <xacro:property name="wheel_thickness" value="0.04" /> <!-- 轮子厚度 --> <!-- 驱动参数 --> <xacro:property name="wheel_separation" value="${base_width}" /> <!-- 轮间距 --> <xacro:property name="wheel_diameter" value="${2*wheel_radius}" /> <!-- 轮直径 --> <!-- ################### 虚拟根链接 ################### --> <link name="dummy_base"> <inertial> <mass value="0.001" /> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial> </link> <joint name="dummy_joint" type="fixed"> <parent link="dummy_base" /> <child link="base_link" /> </joint> <!-- ################### 主体结构 ################### --> <link name="base_link"> <visual> <geometry> <box size="${base_length} ${base_width} ${base_height}" /> </geometry> <material name="base_color"> <color rgba="0 0 0.8 1" /> </material> </visual> <collision> <geometry> <box size="${base_length} ${base_width} ${base_height}" /> </geometry> <surface> <friction> <ode> <mu>0.5</mu> <mu2>0.5</mu2> </ode> </friction> </surface> </collision> <inertial> <mass value="5.0" /> <inertia ixx="0.1" ixy="0.0" ixz="0.0" iyy="0.1" iyz="0.0" izz="0.1" /> </inertial> </link> <!-- ################### 轮子宏定义 ################### --> <xacro:macro name="wheel" params="prefix pos_x pos_y"> <link name="${prefix}_wheel"> <visual> <geometry> <cylinder radius="${wheel_radius}" length="${wheel_thickness}" /> </geometry> <material name="wheel_black" /> </visual> <collision> <geometry> <cylinder radius="${wheel_radius}" length="${wheel_thickness}" /> </geometry> <surface> <friction> <ode> <mu>1.0</mu> <mu2>1.0</mu2> </ode> </friction> </surface> </collision> <inertial> <mass value="0.5" /> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial> </link> <joint name="${prefix}_joint" type="continuous"> <parent link="base_link" /> <child link="${prefix}_wheel" /> <origin xyz="${pos_x} ${pos_y} -${base_height/2}" rpy="${math.pi/2} 0 0" /> <axis xyz="0 0 1" /> </joint> </xacro:macro> <!-- ################### 轮子安装 ################### --> <xacro:wheel prefix="front_left" pos_x="${base_length/2 - wheel_radius}" pos_y="${base_width/2}" /> <xacro:wheel prefix="front_right" pos_x="${base_length/2 - wheel_radius}" pos_y="-${base_width/2}" /> <xacro:wheel prefix="rear_left" pos_x="-${base_length/2 + wheel_radius}" pos_y="${base_width/2}" /> <xacro:wheel prefix="rear_right" pos_x="-${base_length/2 + wheel_radius}" pos_y="-${base_width/2}" /> <!-- ################### Gazebo扩展 ################### --> <gazebo reference="base_link"> <material>Gazebo/Blue</material> <sensor name="imu_sensor" type="imu"> <always_on>true</always_on> <update_rate>100</update_rate> </sensor> </gazebo> <gazebo> <plugin name="differential_drive" filename="libgazebo_ros_diff_drive.so"> <commandTopic>cmd_vel</commandTopic> <odometryTopic>odom</odometryTopic> <odometryFrame>odom</odometryFrame> <robotBaseFrame>base_link</robotBaseFrame> <publishOdomTF>true</publishOdomTF> <wheelSeparation>${wheel_separation}</wheelSeparation> <wheelDiameter>${wheel_diameter}</wheelDiameter> <maxWheelTorque>20</maxWheelTorque> <publishWheelTF>true</publishWheelTF> <publishWheelJointState>true</publishWheelJointState> </plugin> </gazebo> </robot> four_areas.world <?xml version="1.0"?> <sdf version="1.9"> <!-- 升级SDF版本 --> <world name="four_areas"> <!-- 地面 --> <include> <uri>model://ground_plane</uri> </include> <!-- 光照 --> <include> <uri>model://sun</uri> <name>main_sun</name> <!-- 添加唯一名称 --> </include> <!-- 区域1 (红色) --> <model name="area_1"> <static>true</static> <link name="area1_link"> <!-- 修改链接名称 --> <visual name="area1_visual"> <!-- 添加唯一名称 --> <geometry> <box><size>0.5 0.5 0.01</size></box> </geometry> <material> <script> <uri>file://media/materials/scripts/gazebo.material</uri> <name>Gazebo/Red</name> <!-- 使用Gazebo内置材质 --> </script> </material> </visual> </link> <pose>1.0 0.0 0.005 0 0 0</pose> </model> <!-- 区域2 (绿色) --> <model name="area_2"> <static>true</static> <link name="area2_link"> <visual name="area2_visual"> <geometry> <box><size>0.5 0.5 0.01</size></box> </geometry> <material> <script> <uri>file://media/materials/scripts/gazebo.material</uri> <name>Gazebo/Green</name> </script> </material> </visual> </link> <pose>2.0 0.0 0.005 0 0 0</pose> </model> <!-- 区域3 (蓝色) --> <model name="area_3"> <static>true</static> <link name="area3_link"> <visual name="area3_visual"> <geometry> <box><size>0.5 0.5 0.01</size></box> </geometry> <material> <script> <uri>file://media/materials/scripts/gazebo.material</uri> <name>Gazebo/Blue</name> </script> </material> </visual> </link> <pose>3.0 0.0 0.005 0 0 0</pose> </model> <!-- 区域4 (黄色) --> <model name="area_4"> <static>true</static> <link name="area4_link"> <visual name="area4_visual"> <geometry> <box><size>0.5 0.5 0.01</size></box> </geometry> <material> <script> <uri>file://media/materials/scripts/gazebo.material</uri> <name>Gazebo/Yellow</name> </script> </material> </visual> </link> <pose>4.0 0.0 0.005 0 0 0</pose> </model> </world> </sdf> 利用ros设置仿真四轮小车,并且有仿真环境,仿真环境中有1、2、3、4四个小区域,能输入1、2、3、4让小车跑到相对应的1、2、3、4位置区域,RVIZ可视化来看结果,写出相关代码,和相关文件包含示例.查看上述代码并完善
最新发布
05-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值